575 votes

Comment changer la barre de progression ' couleur progrès s dans Android

J’utilise une barre de progression horizontale dans mon application Android, et je veux changer sa couleur de progression (qui est jaune par défaut). Comment est-ce que je peux faire à l’aide de code (non XML) ?

528voto

Torben Kohlmeier Points 1028

Pour un ProgressBar horizontal, vous pouvez également utiliser un ColorFilter, comme ceci:

 progressBar.getProgressDrawable().setColorFilter(Color.RED, Mode.SRC_IN);
 

ProgressBar rouge

311voto

Alex Volovoy Points 34562

Je suis désolé que ce ne soit pas la réponse, mais qu'est-ce qui conduit à l'exigence de la définir à partir du code? Et .setProgressDrawable devrait fonctionner s'il est défini correctement

 <layer-list xmlns:android="http://schemas.android.com/apk/res/android">

<item android:id="@android:id/background">
    <shape>
        <corners android:radius="5dip" />
        <gradient
                android:startColor="#ff9d9e9d"
                android:centerColor="#ff5a5d5a"
                android:centerY="0.75"
                android:endColor="#ff747674"
                android:angle="270"
        />
    </shape>
</item>

<item android:id="@android:id/secondaryProgress">
    <clip>
        <shape>
            <corners android:radius="5dip" />
            <gradient
                    android:startColor="#80ffd300"
                    android:centerColor="#80ffb600"
                    android:centerY="0.75"
                    android:endColor="#a0ffcb00"
                    android:angle="270"
            />
        </shape>
    </clip>
</item>
<item
    android:id="@android:id/progress"
>
    <clip>
        <shape>
            <corners
                android:radius="5dip" />
            <gradient
                android:startColor="@color/progress_start"
                android:endColor="@color/progress_end"
                android:angle="270" />
        </shape>
    </clip>
</item>

</layer-list>
 

244voto

jhavatar Points 566

Pour ma barre de progression indéterminée (spinner), je viens de définir un filtre de couleur sur le drawable. Fonctionne très bien et une seule ligne.

Exemple où la couleur est définie en rouge:

 ProgressBar spinner = new android.widget.ProgressBar(
                context,
                null,
                android.R.attr.progressBarStyle);

spinner.getIndeterminateDrawable().setColorFilter(0xFFFF0000, android.graphics.PorterDuff.Mode.MULTIPLY);
 

entrer la description de l'image ici

34voto

PaulieG Points 221

Selon certaines des suggestions, vous POUVEZ spécifier une forme et un fichier pouvant être dessiné avec une couleur, puis définissez-le. J'ai ce travail par programme. C'est comme ça que je le fais ..

Assurez-vous d'abord d'importer la bibliothèque à dessiner.

import android.graphics.drawable.*;

Ensuite, utilisez le code similaire à ci-dessous;

 ProgressBar pg = (ProgressBar)row.findViewById(R.id.progress);
final float[] roundedCorners = new float[] { 5, 5, 5, 5, 5, 5, 5, 5 };
pgDrawable = new ShapeDrawable(new RoundRectShape(roundedCorners, null,null));
String MyColor = "#FF00FF";
pgDrawable.getPaint().setColor(Color.parseColor(MyColor));
ClipDrawable progress = new ClipDrawable(pgDrawable, Gravity.LEFT, ClipDrawable.HORIZONTAL);
pg.setProgressDrawable(progress);   
pg.setBackgroundDrawable(getResources().getDrawable(android.R.drawable.progress_horizontal));
pg.setProgress(45);
 

19voto

pyko Points 1246

Frapper le même problème, tout en travaillant sur la modification de l'apparence/sentir de la valeur par défaut de la barre de progression. Voici quelques infos qui nous l'espérons aider les gens :)

  • Le nom du fichier xml ne doit contenir que des caractères: a-z0-9_. (ie. pas de capitales!)
  • Pour faire référence à votre "drawable" c'est - R.drawable.filename
  • Pour remplacer l'apparence par défaut, vous utilisez myProgressBar.setProgressDrawable(...), cependant, vous devez peut pas seulement se référer à votre mise en page personnalisée en tant que R.drawable.filename, vous devez le récupérer en tant que Drawable:
    Resources res = getResources();
    myProgressBar.setProgressDrawable(res.getDrawable(R.drawable.filename);
    
  • Vous devez définir le style avant de progrès secondaires/le progrès/max (réglage par la suite, pour moi, a abouti à un "vide" de la barre de progression)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X