web-dev-qa-db-fra.com

Barre de progression du cercle indéterminé sur Android est blanc, malgré la couleur

Je n'arrive pas à comprendre comment changer la couleur de la barre de progression du cercle indéterminé sur API-21. Je me suis assuré que mon colorAccent est correctement défini. Ma compréhension est que le système devrait prendre de colorAccent et teinter la barre de progression en conséquence. Une idée de ce qui pourrait mal tourner?

app/src/main/res/layout-v21/fragment_story_comments.xml

<ProgressBar
        Android:id="@+id/progress_bar"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:layout_centerInParent="true"
        Android:visibility="visible"/>

app/src/main/res/values ​​/ themes.xml

<style name="AppTheme.Base" parent="Theme.AppCompat.NoActionBar">
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
    <item name="Android:windowNoTitle">true</item>
</style>

app/src/main/res/values ​​/ colours.xml

<color name="colorAccent">#ff5722</color>
<color name="colorPrimary">#ff5722</color>
<color name="colorPrimaryDark">#e64a19</color>
32
burntcookie90

Remarque: cela ne fonctionne qu'à partir de Android 5.0 (Lollipop) et plus, conformément à la demande d'origine. Pour les anciennes versions Android Android), vous aurez pour remplacer le progressDrawable de ProgressBar.

En développant la réponse de Liam, j'ai réussi à faire fonctionner cela sur XML en utilisant l'indicateur indeterminateTint.

Apparemment, pour le faire fonctionner, vous devez définir les indicateurs indeterminate et indeterminateTintMode.

Le mode est un peu mystérieux pour moi. Je les ai tous essayés mais j'ai seulement obtenu les résultats attendus avec src_in et src_atop. Je ne sais pas ce que ces modes font réellement, donc si quelqu'un peut développer cela, je vous en serais reconnaissant.

Dans tous les cas, cela devrait fonctionner:

<ProgressBar
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:indeterminate="true"
    Android:indeterminateTint="#F00"
    Android:indeterminateTintMode="src_in" />
85
Cachapa

cela fonctionne aussi pour les versions inférieures d'Android:

if (progBar.getIndeterminateDrawable() != null) {
        progBar.getIndeterminateDrawable().setColorFilter(getResources().getColor(R.color.accent), Android.graphics.PorterDuff.Mode.SRC_IN);
}
20
bapho

J'ai réussi à changer la couleur de la ProgressBar sur API 21 par programmation du vert au blanc comme ceci:

mProgressBar.getIndeterminateDrawable().setColorFilter(new LightingColorFilter(0xFF000000, 0xFFFFFF));

Cependant, je ne sais toujours pas comment le faire en XML, mais j'espère que cela aidera quelqu'un.

11
Liam Cottle

Vous devez définir une couleur pour les contrôles activés dans votre thème:

 <item name="colorControlActivated">@color/accent</item>

Cela ne fonctionne que pour Android 5.0+

6
Andriy Druk