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) ?
Réponses
Trop de publicités? 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>
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);
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);
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 queR.drawable.filename
, vous devez le récupérer en tant queDrawable
: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)