Comment puis-je changer la couleur des étoiles et comment puis-je changer la taille des étoiles ?
Réponses
Trop de publicités?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.
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);
É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.
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