Je souhaite modifier la couleur de la barre d'évaluation en dorée.
Je ne veux pas personnaliser les étoiles, je veux juste changer la couleur de l'API 16 ou supérieure
J'ai essayé les solutions suivantes mais aucune d’elles n’a fonctionné pour moi
1.
RatingBar ratingBar = (RatingBar) findViewById(R.id.ratingBar);
LayerDrawable stars = (LayerDrawable) ratingBar.getProgressDrawable();
stars.getDrawable(2).setColorFilter(Color.YELLOW, PorterDuff.Mode.SRC_ATOP);
2.
Android:progressDrawable="@color/golden" in XML
Cette option est maintenant incluse dans la bibliothèque AppCompat . La version AppCompat de RatingBar est utilisée automatiquement.
http://developer.Android.com/reference/Android/support/v7/widget/AppCompatRatingBar.html
Exemple (de ma propre application):
<RatingBar
Android:id="@+id/rating"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:numStars="5"
Android:stepSize="1"
Android:theme="@style/RatingBar"/>
Avec thème:
<style name="RatingBar" parent="Theme.AppCompat">
<item name="colorControlNormal">@color/duskYellow</item>
<item name="colorControlActivated">@color/lightGrey</item>
</style>
Ajoutez simplement cette ligne à xml (API 21 et supérieure)
Android:progressTint="@color/color"
Comme vous l'avez dit, vous voulez changer la couleur de l'étoile sans utiliser le dessin. Vous pouvez le faire en quelques lignes de code comme ci-dessous.
RatingBar ratingBar = (RatingBar) findViewById(R.id.ratingBar);
Drawable drawable = ratingBar.getProgressDrawable();
drawable.setColorFilter(Color.parseColor("#0064A8"),PorterDuff.Mode.SRC_ATOP);
Ma tâche consistait à changer la couleur de la barre d'évaluation en couleur principale de l'application pour Android> = 14 SDK . J'ai résolu ce problème en code et en fichier xml.
mRatingBar = (RatingBar)view.findViewById(R.id.ratingBar);
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Lollipop) {
try {
Drawable progressDrawable = mRatingBar.getProgressDrawable();
if (progressDrawable != null) {
DrawableCompat.setTint(progressDrawable, ContextCompat.getColor(getContext(), R.color.colorPrimary));
}
} catch (Exception e) {
e.printStackTrace();
}
}
Et en fichier XML
<RatingBar
Android:id="@+id/ratingBar"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_gravity="center_horizontal"
Android:backgroundTint="@color/colorPrimary"
Android:numStars="5"
Android:progressTint="@color/colorPrimary"
Android:rating="0"
Android:secondaryProgressTint="@Android:color/transparent"
Android:stepSize="1" />
essaye ça,
Vous avez besoin d'images 3 étoiles (red_star_full.png, red_star_half.png et red_star_empty.png) et d'un fichier xml. Si vous voulez une étoile dorée, utilisez l’image d’étoile dorée. c'est pour l'étoile rouge.
vous pouvez mettre ratingbar_color.xml dans res/drawable.
<?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 dans la définition de la barre de notation, utilisez ce qui suit.
<RatingBar Android:progressDrawable="@drawable/ratingbar_red/>
Utilisez ce code pour passer la ligne
Drawable drawableReview = writeReviewRatingBar.getProgressDrawable();
drawableReview.setColorFilter(Color.parseColor("#FFFDD433"), PorterDuff.Mode.SRC_ATOP);
RatingBar ratingreview;
ratingreview=(RatingBar)v.findViewById(R.id.ratingreview);
ratingreview.setRating(Float.parseFloat(objrating));
Drawable drawable = ratingreview.getProgressDrawable();
drawable.setColorFilter(Color.parseColor("#6A9A28"), PorterDuff.Mode.SRC_ATOP);
Mon cas d'utilisation était de montrer différentes couleurs pour différentes évaluations. Par exemple :
1- rouge
2- Orange
3- Jaune
4- Vert clair
5- Vert foncé
Solution :
ratingBar.setOnRatingBarChangeListener(new RatingBar.OnRatingBarChangeListener() {
@Override
public void onRatingChanged(final RatingBar ratingBar, final float rating, final boolean fromUser) {
setCurrentRating(rating);
}
});
Puis dans votre méthode setCurrentRating()
:
private void setCurrentRating(float rating) {
LayerDrawable drawable = (LayerDrawable)rateOverall.getProgressDrawable();
if(mContext!=null) {
switch (Math.round(rating)) {
case 1:
setRatingStarColor(drawable.getDrawable(2), ContextCompat.getColor(mContext, R.color.dark_red));
break;
case 2:
setRatingStarColor(drawable.getDrawable(2), ContextCompat.getColor(mContext, R.color.light_orange));
break;
case 3:
setRatingStarColor(drawable.getDrawable(2), ContextCompat.getColor(mContext, R.color.light_yellow));
break;
case 4:
setRatingStarColor(drawable.getDrawable(2), ContextCompat.getColor(mContext, R.color.light_green_review));
break;
case 5:
setRatingStarColor(drawable.getDrawable(2), ContextCompat.getColor(mContext, R.color.dark_green));
break;
}
setRatingStarColor(drawable.getDrawable(1), ContextCompat.getColor(mContext, R.color.transparent));
setRatingStarColor(drawable.getDrawable(0), ContextCompat.getColor(mContext, R.color.light_grey_payment));
}
}
Puis dans votre méthode setRatingStarColor()
:
private void setRatingStarColor(Drawable drawable, @ColorInt int color)
{
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Lollipop)
{
DrawableCompat.setTint(drawable, color);
}
else
{
drawable.setColorFilter(color, PorterDuff.Mode.SRC_IN);
}
}
Merci à ceci la réponse qui m'a aidé à résoudre ceci . J'espère que cela aidera quelqu'un!
Solution simple, utilisez AppCompatRatingBar et utilisez le code ci-dessous
ratingbar.setProgressTintList(ColorStateList.valueOf(ContextCompat.getColor(context, R.color.colorAccent)));
La solution la plus simple que j'ai trouvée consiste à modifier la définition de la couleur pour la couleur "colorAccent" dans le fichier color.xml. C'est de la magie sans codage supplémentaire.