148 votes

Barre d'évaluation Android : changer la couleur des étoiles

Comment puis-je changer la couleur des étoiles et comment puis-je changer la taille des étoiles ?

122voto

Alex Points 561

C'est un peu compliqué sur le blog mentionné, j'ai utilisé une méthode similaire mais plus simple. Vous avez besoin de 3 images d'étoiles (red_star_full.png, red_star_half.png et red_star_empty.png) et un xml, c'est tout.

Mettez ces 3 images dans res/drawable.

Mettez-y le fichier ratingbar_red.xml suivant :

<?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/red_star_empty" />
    <item android:id="@android:id/secondaryProgress" android:drawable="@drawable/red_star_half" />
    <item android:id="@android:id/progress" android:drawable="@drawable/red_star_full" />
</layer-list>

et, enfin, dites à votre définition de la barre d'évaluation d'utiliser ceci, c'est-à-dire

<RatingBar android:progressDrawable="@drawable/ratingbar_red"/>

C'est tout.

94voto

Mirek Michalak Points 151

Essayez ceci, si vous voulez seulement changer de couleur :

RatingBar ratingBar = (RatingBar) findViewById(R.id.ratingBar);
LayerDrawable stars = (LayerDrawable) ratingBar.getProgressDrawable();
stars.getDrawable(2).setColorFilter(Color.YELLOW, PorterDuff.Mode.SRC_ATOP);

37voto

Si vous voulez changer la couleur pour tous les états des étoiles, vous pouvez utiliser :

LayerDrawable stars = (LayerDrawable) ratingBar.getProgressDrawable();
        stars.getDrawable(2).setColorFilter(getResources().getColor(R.color.starFullySelected), PorterDuff.Mode.SRC_ATOP);
        stars.getDrawable(1).setColorFilter(getResources().getColor(R.color.starPartiallySelected), PorterDuff.Mode.SRC_ATOP);
        stars.getDrawable(0).setColorFilter(getResources().getColor(R.color.starNotSelected), PorterDuff.Mode.SRC_ATOP);

27voto

CommonsWare Points 402670

Étape 1 : Créez votre propre style, en clonant l'un des styles existants (à partir de $ANDROID_HOME/platforms/$SDK/data/res/values/styles.xml ), en le plaçant dans le dossier de votre propre projet. styles.xml et d'y faire référence lorsque vous ajoutez le widget à une mise en page.

Étape 2 : Créez votre propre LayerDrawable Ressources XML pour le RatingBar en indiquant les images appropriées à utiliser pour la barre. Les styles originaux vous indiqueront les ressources existantes avec lesquelles vous pourrez comparer. Ensuite, ajustez votre style pour utiliser votre propre LayerDrawable plutôt que des ressources intégrées.

25voto

dirkoneill Points 628

Les solutions qu'Alex et CommonsWares ont postées sont correctes. Une chose dont Android ne parle jamais est la taille correcte des pixels pour les différentes densités. Voici les dimensions requises pour chaque densité en fonction du halo lumineux.

Petite étoile

mdpi: 16px
hdpi: 24px
xhdpi: 32px
xxhdpi: 48px

Étoile moyenne

mdpi: 24px
hdpi: 36px
xhdpi: 48px
xxhdpi: 72px

Grande étoile

mdpi: 35px
hdpi: 52px
xhdpi: 69px
xxhdpi: 105px

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