2010-04-28 12 views
21

Tengo una barra de progreso con el siguiente estilo: style="?android:attr/android:progressBarStyleSmall"¿Cómo cambiar el color de una ProgressBar indefinida?

Tristemente, la barra es casi blanca y en mi caso se muestra sobre un fondo blanco. La barra de progreso es casi invisible debido a eso.

¿Cómo puedo cambiar el color de la barra de progreso? Un gris más oscuro sería genial.

Respuesta

10

La razón por la que la barra es de ese color es por el estilo que ha seleccionado. Ese es un estilo fijo y utiliza los temas del sistema para la generación de elementos de la interfaz de usuario.

Mire el código fuente de here. Este atributo progressBarStyleSmall usa los estilos definidos here.

<style name="Widget.ProgressBar.Small"> 
    <item name="android:indeterminateDrawable">@android:drawable/progress_small_white</item> 
    <item name="android:minWidth">16dip</item> 
    <item name="android:maxWidth">16dip</item> 
    <item name="android:minHeight">16dip</item> 
    <item name="android:maxHeight">16dip</item> 
</style> 

Basta con crear un estilo personalizado siguiendo el ejemplo del código fuente de Android. Necesitarías reemplazar el android: indeterminadoDrawable a lo que quieras.

+8

Enlaces con errores – Marabita

2

Tuve un momento muy difícil tratando de cambiar su color. Para resolverlo, obtuve el código src de Android e hice mi propia clase ProgressBar.

No es la mejor respuesta, pero funcionó para mí.

+5

¿Puede compartir la clase? – Arslan

25

Para obtener un ProgressBar negro, utilice uno de los estilos inversos:

<ProgressBar style="@android:style/Widget.ProgressBar.Inverse"/> 
<ProgressBar style="@android:style/Widget.ProgressBar.Large.Inverse"/> 
<ProgressBar style="@android:style/Widget.ProgressBar.Small.Inverse"/> 
+0

Esto funcionó perfectamente para mí, ¡gracias! – greg7gkb

+0

Esto no funciona en uno de nuestros modelos Gingerbread con Cyanogen. Lástima :( –

1

Sólo una nota, para usar

<ProgressBar style="@android:style/Widget.ProgressBar.Inverse"/> 

o cualquiera de las barras de progreso inversas, usted tiene que configurar su requisito sdk android mínimo para el nivel 4 (Android 1.6).

3
public static void setColorOfProgressBar(ProgressBar mProgressBar, int mColor){ 
    mProgressBar.getIndeterminateDrawable().setColorFilter(mColor, android.graphics.PorterDuff.Mode.MULTIPLY); 
} 
39
progressBar.getIndeterminateDrawable().setColorFilter(
      getResources().getColor(R.color.light_light_purple), 
      android.graphics.PorterDuff.Mode.SRC_IN); 

Este código cambia el holograma de color por defecto inderminate dibujable a su propio color. Defina su código de color y reemplace R.color.light_light_purple en R.color.your_color_code.

+1

Esto realmente debería ser la respuesta aceptada. Recientemente descubrí que el método de filtro de color básicamente cambia cualquier cosa al color que quieras, y es bastante increíble. – LukeWaggoner

+0

Muchas gracias ...! Plzz acepta mi respuesta para obtener más beneficios a los demás :) –

+0

Solo necesitaba usar este fragmento para las versiones de SDK anteriores a Lollipop, así que envolví este fragmento en un método estático: 'LegacyStyleUtil # adjustLegacyStyle (Context, ProgressBar)'. Entonces, invoco este método desde mis actividades/fragmentos. '(contexto Contexto, ProgressBar progressBar) public void adjustLegacyStyle { si (BuildConfigUtil.isLegacySDK() && progressBar! = Null) { progressBar.getIndeterminateDrawable(). SetColorFilter ( context.getResources(). GetColor (R. color.green_progress), PorterDuff.Mode.SRC_IN); } } ' –

Cuestiones relacionadas