2010-04-14 26 views
60

Sto cercando una cosa molto ovvia (in altre lingue !!) e mi fa impazzire!Come modificare il colore ProgressBar indeterminato di Android?

Mi piacerebbe sapere come posso cambiare il colore dell'indicatore progressivo dal colore bianco/grigio al nero? Quando cambio indeterminateDrawable, ottengo un'immagine statica invece di una progress progress animata animata. C'è un modo per farlo semplicemente in xml?

Grazie!

risposta

-4

in realtà tutto ciò che devi fare (sia per il cerchio che per la barra) è creare un file xml in drawable come mostrato di seguito ...... progress_spinner_001 punta a qualsiasi immagine tu desideri animare e durata ... per quanto tempo u desidera visualizzare ogni fotogramma per ....... e impostare ur Android: indeterminateDrawable = filename_in_drawable ....

<?xml version="1.0" encoding="utf-8"?> 
<animation-list 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:oneshot="false"> 
<item android:drawable="@drawable/progress_spinner_001" android:duration="300" /> 
<item android:drawable="@drawable/progress_spinner_002" android:duration="300" /> 
<item android:drawable="@drawable/progress_spinner_003" android:duration="300" /> 
    <item android:drawable="@drawable/progress_spinner_004" android:duration="300" /> 
    <item android:drawable="@drawable/progress_spinner_005" android:duration="300" /> 
     <item android:drawable="@drawable/progress_spinner_006" android:duration="300" /> 
    <item android:drawable="@drawable/progress_spinner_007" android:duration="300" /> 
    <item android:drawable="@drawable/progress_spinner_008" android:duration="300" /> 
</animation-list> 

ps u potrebbe essere necessario ridimensionare il ProgressBar per visualizzare lo desideri

+4

-1: questa risposta dice "come mostrato di seguito" ma non mostra nulla. Lo trovo molto difficile da capire. –

64

Per ottenere un ProgressBar nel tema predefinito da utilizzare su sfondo bianco/retroilluminato, utilizzare uno degli stili inversi:

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

Questo di solito fornisce un nero su ProgressBar trasparente, ma alcune installazioni del sistema operativo utilizzano risorse personalizzate. Se stai cercando un colore specifico, dovrai tirare i tuoi drawable seguendo le istruzioni fornite da CommonsWare.

+0

Questa non sembra essere una soluzione indipendente dall'apparecchio. Sulla mia LG Optimus 2X Speed, un ProgressBar indeterminato è sempre sempre nero, mentre su un HTC Desire HD con CyanogenMod per 2.3.3, è sempre rosso. –

+0

@Paul - Sì, hai ragione. Molti produttori di dispositivi personalizzano i temi e il tema predefinito può cambiare tra le versioni di Android. Correggerò il testo sopra – Anm

+0

ha funzionato per me. grazie – serggl

7
<?xml version="1.0" encoding="UTF-8"?> 
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:id="@android:id/background" android:drawable="@drawable/bg" /> 
    <item android:id="@android:id/secondaryProgress" android:drawable="@drawable/secondary" /> 
    <item android:id="@android:id/progress" android:drawable="@drawable/progress" /> 
</layer-list> 
63
progressBar.getIndeterminateDrawable().setColorFilter(
      getResources().getColor(Your_Color), 
      android.graphics.PorterDuff.Mode.SRC_IN); 

e sostituire Your_Color con il colore desiderato come: R.color.your_color_code

+0

questa dovrebbe essere accettata risposta;) – Leo

+0

Questo è il modo più semplice e veloce. –

+8

Potrebbe definire in xml: 'android: indeterminateTint =" @ colors/your_color "' 'android: indeterminateTintMode =" src_in "' – zhaoyuanjie

10

vedo altre risposte sono piuttosto vecchie, al fine di cambiare il colore ProgressBar indeterminato è sufficiente impostare gli attributi android:indeterminateTint e android:indeterminateTintMode nell'elemento ProgressBar direttamente in XML:

<ProgressBar 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:indeterminateTint="@color/colorPrimary" 
    android:indeterminateTintMode="src_in" 
    android:indeterminate="true" /> 

android:indeterminateTint - Tinta da applicare all'indicatore di stato indeterminato.

deve essere un valore di colore, nella forma di "#rgb", "#argb", "#rrggbb", "#aarrggbb", o un riferimento a una risorsa @color/colorPrimary.

android:indeterminateTintMode - Modalità di fusione utilizzata per applicare la tinta dell'indicatore di avanzamento.

Deve essere uno dei seguenti valori costanti:
add, multiply, screen, src_atop, src_in o src_over

Getter e metodi Setter per questi attributi sono:

Tutti sono stati aggiunti API level 21

+1

Funziona bene, grazie – Duque

+1

Thankssssssssss :) – Denees

+0

Funziona perfettamente questa è un'ottima soluzione, stavo cercando circa 2 ore diverse soluzioni, grazie mille! –

0

Per API inferiore a 23 uso

progressBar.getIndeterminateDrawable().setColorFilter(
     getResources().getColor(Your_Color), 
     android.graphics.PorterDuff.Mode.SRC_IN); 

altro uso

progressBar.getIndeterminateDrawable().setColorFilter(
     ContextCompat.getColor(context, Your_Color), 
     android.graphics.PorterDuff.Mode.SRC_IN); 
Problemi correlati