IndeterminateProgressBar en el estilo de ActionBar – problema de relleno

Quiero poner una barra de progreso indeterminada dentro de mi ActionBar (con ActionBarSherlock). Todo funciona, pero quiero que sea la pequeña barra de progreso. Utilizo el estilo siguiente:

<style name="IndeterminateProgress" parent="@android:style/Widget.ProgressBar.Small"> <item name="android:progressBarPadding">32dp</item> <item name="progressBarPadding">32dp</item> <item name="android:itemPadding">32dp</item> <item name="itemPadding">32dp</item> </style> <style name="Widget.Styled.ActionBar.Tiles" parent="Widget.Sherlock.Light.ActionBar"> <item name="android:indeterminateProgressStyle">@style/IndeterminateProgress</item> <item name="android:progressBarPadding">32dp</item> <item name="progressBarPadding">32dp</item> <item name="android:itemPadding">32dp</item> <item name="itemPadding">32dp</item> </style> 

El problema es que no puedo establecer el relleno en la barra de progreso. Como puedes ver arriba, he probado todas las combinaciones posibles de itemPadding y progressBarPadding , etc.

El resultado es siempre el mismo: Introduzca aquí la descripción de la imagen

¿Algunas ideas?

Encontré una solución de trabajo cómo fijar la barra de progreso indeterminada con el tamaño y el relleno apropiados . Mi solución no utiliza la solución con setActionView (). Es una solución para la función de barra de progreso incorporada, soportada por la barra de acción nativa (ActionBarSherlock). La barra de progreso está activada / desactivada mediante el método setProgressBarIndeterminateVisibility (boolean) . Lo probé en Android 2, 3, 4 y ldpi, mdpi, xhdpi.

Resultado

AndroidManifest.xml:

 <application ... android:theme="@style/Theme.Example"> 

/res/values/styles.xml:

 <resources xmlns:android="http://schemas.android.com/apk/res/android"> ... <style name="Theme.Example" parent="Theme.Sherlock"> <item name="actionBarStyle">@style/Example.ActionBar</item> <item name="android:actionBarStyle">@style/Example.ActionBar</item> </style> <style name="Example.ActionBar" parent="Widget.Sherlock.ActionBar"> <item name="indeterminateProgressStyle">@style/Example.ActionBar.IndeterminateProgressBar</item> <item name="android:indeterminateProgressStyle">@style/Example.ActionBar.IndeterminateProgressBar</item> </style> <style name="Example.ActionBar.IndeterminateProgressBar" parent="@android:style/Widget.ProgressBar.Large.Inverse"> <item name="android:indeterminateDrawable">@drawable/layer_list_ab_indeterminate_progress_bar</item> <item name="android:minWidth">@dimen/ab_indeterminate_progress_bar_size</item> <item name="android:maxWidth">@dimen/ab_indeterminate_progress_bar_size</item> <item name="android:minHeight">@dimen/ab_indeterminate_progress_bar_size</item> <item name="android:maxHeight">@dimen/ab_indeterminate_progress_bar_size</item> </style> </resources> 

/res/drawable/layer_list_ab_indeterminate_progress_bar.xml:

 <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <item> <!-- /res/drawable-mdpi/ab_indeterminate_progress_bar asset is taken from /sdk/platforms/android-18/data/res/mdpi/spinner_white_48.png and its content (optical square) is resized to ~0.6 (must be even number) /res/drawable-mdpi-v14/ab_indeterminate_progress_bar asset is taken from /sdk/platforms/android-18/data/res/mdpi/spinner_48_outer_holo.png and its content (optical square) is resized to 0.75 --> <rotate android:drawable="@drawable/ab_indeterminate_progress_bar" android:interpolator="@android:anim/linear_interpolator" android:pivotX="50%" android:pivotY="50%" android:fromDegrees="0" android:toDegrees="360" /> </item> </layer-list> 

/res/values/dimens.xml:

 <dimen name="ab_indeterminate_progress_bar_size">48dp</dimen> 

Finalmente creé activos de barra de progreso. He utilizado estos dos activos de Android SDK:

  • /sdk/platforms/android-18/data/res/mdpi/spinner_white_48.png para Honeycomb y mayores
  • /sdk/platforms/android-18/data/res/mdpi/spinner_48_outer_holo.png para ICS y más reciente

Para obtener el tamaño adecuado y el relleno , necesitamos cambiar el tamaño de los activos. He cambiado el tamaño de spinner_white_48.png a ~ 0.6 . Para mdpi, era 28px. Debe ser número par para ser centralmente simétrico. Cambié de tamaño sólo el contenido, no todo el icono. Así que el icono en mdpi tiene todavía 48px, pero su contenido (cuadrado óptico) es más pequeño (28px). Puede cambiar el tamaño del contenido de esta manera: primero cambie "tamaño de imagen" a 28px X 28px, luego cambie "tamaño de lienzo" de nuevo a 48px X 48px. He cambiado el tamaño de spinner_48_outer_holo.png a 0.75 . Puede descargar los activos a continuación.

¿Por qué utilizo diferentes activos para Honeycomb e ICS +? Porque si estoy usando sólo los activos de Holo, la animación es poco snatchy en algunos dispositivos con Honeycomb-.

Sugerencia: puede agregar otro elemento con alguna animación a layer_list_ab_indeterminate_progress_bar.xml. Por ejemplo, la barra de progreso estándar de Holo usa 2 animaciones con dirección opuesta y diferentes grados. Consulte progress_medium_holo.xml en SDK.

/res/drawable-mdpi/ab_indeterminate_progress_bar.png:

Introduzca aquí la descripción de la imagen

/res/drawable-mdpi-v14/ab_indeterminate_progress_bar.png (apenas visible en esta página):

Introduzca aquí la descripción de la imagen

/res/drawable-hdpi/ab_indeterminate_progress_bar.png:

Introduzca aquí la descripción de la imagen

/res/drawable-hdpi-v14/ab_indeterminate_progress_bar.png (apenas visible en esta página):

Introduzca aquí la descripción de la imagen

/res/drawable-xhdpi/ab_indeterminate_progress_bar.png:

Introduzca aquí la descripción de la imagen

/res/drawable-xhdpi-v14/ab_indeterminate_progress_bar.png (apenas visible en esta página):

Introduzca aquí la descripción de la imagen

No sé la respuesta exacta, pero estos ajustes funcionó para mí ..

Este es mi refresh_spinner.xml

  <?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="center"> <ProgressBar android:layout_width="32dp" android:layout_height="32dp" android:layout_gravity="center" android:layout_marginRight="12dp" android:layout_marginLeft="12dp" style="?indeterminateProgressStyle" /> </FrameLayout> 

Y esto en el estilo correspondiente xml

 <style name="Widget.MyTheme.ActionBar" parent="Widget.Sherlock.ActionBar"> <item name="indeterminateProgressStyle">?android:attr/progressBarStyleSmallInverse</item> </style> 

Estos ajustes funcionaron para mí. Por favor, hágamelo saber si tiene alguna duda.

Saludos Parvaz Bhaskar

EDIT2: ya que estaba tratando de diferentes métodos que terminé usando? Android: attr / progressiveBarStyleSmallInverse como la única propiedad en mi style.xml que más tarde se refrenced de mi spinner xml bajo el estilo de style = "? IndeterminateProgressStyle"

EDIT: mantenga una referencia de su menuItem y siempre que quiera mostrar una barra de progreso de refresco use setActionView (R.layout.your_layout), y cambie a null cuando la necesidad haya terminado. OnCreateOptionsMenu sería un buen lugar para tomar el menuItem al comienzo.

Me encuentro con esto hoy y encontrar una solución para Android 3/4 +

 ProgressBar mProgressBarInActionBar = null; Resources res = Resources.getSystem(); int id = res.getIdentifier("progress_circular", "id", "android"); View internal = findViewById(id); if(internal != null && internal instanceof ProgressBar){ mProgressBarInActionBar = (ProgressBar)internal; } mProgressBarInActionBar.setPadding(0, 0, right, 0); 

Establecer un derecho adecuado 🙂

Tuve el mismo problema y encontré una respuesta fácil:

 <style name="ActionBarProgressBar.MyStyle" parent="@android:style/Widget.Holo.ProgressBar.Large"> <item name="android:minWidth">56dp</item> <item name="android:maxWidth">56dp</item> <item name="android:minHeight">35dp</item> <item name="android:maxHeight">35dp</item> </style> 

El Ancho es el ancho estándar de la barra de Acción. Si cambia los valores minHeight y maxHeight, la imagen se escalará en ambos sentidos.

Y aquí está el estilo de la Barra de Acción donde se establece la apariencia del Progreso Indeterminado:

 <style name="action_bar_theme" parent="@android:style/Widget.Holo.ActionBar"> <item name="android:indeterminateProgressStyle">@style/ActionBarProgressBar.MyStyle</item> </style> 

Y la definición en el Tema que estás usando (no olvides usarlo en tu manifiesto):

 <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> <item name="android:actionBarStyle">@style/action_bar_theme</item> </style> 

Saludos, Paul

  • Resaltado Elemento seleccionado en el menú de menú del cajón / deslizante
  • El borde de ActionBar no desaparecerá cuando esté en superposición
  • Android ActionBar: mostrar / ocultar las pestañas de forma dinámica?
  • ¿Es necesario actionbarsherlock ya?
  • ActionbarSherlock: las pestañas no responden en la orientación horizontal
  • ¿Es posible cambiar el indicador de pestaña de la barra de acciones programáticamente?
  • Deshabilitar el desplazamiento entre las pestañas en FragmentActivity
  • FindViewById para MenuItem devuelve null
  • Actionbarsherlock + tabs + multi fragmentos?
  • ActionBar setProgressBarIndeterminateVisibility (false) no funciona en android 2.3
  • ¿Por qué mi título utiliza una fuente personalizada que no está centrada verticalmente en mi ActionBar?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.