web-dev-qa-db-fra.com

Android: Changez la couleur de ratingbar en doré

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
32
ojas

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>
81
theblitz

Ajoutez simplement cette ligne à xml (API 21 et supérieure)

     Android:progressTint="@color/color"
11
Raseem Ayatt

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);
7
Chandra Sharma

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" />
5
Malder

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/>
3
Ganpat Kaliya

Utilisez ce code pour passer la ligne

Drawable drawableReview = writeReviewRatingBar.getProgressDrawable();
        drawableReview.setColorFilter(Color.parseColor("#FFFDD433"), PorterDuff.Mode.SRC_ATOP);
2
Mohammad Shahzeb Khan
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);
2
Soumen Das

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!

2
Shubham Srivastava

Solution simple, utilisez AppCompatRatingBar et utilisez le code ci-dessous

ratingbar.setProgressTintList(ColorStateList.valueOf(ContextCompat.getColor(context, R.color.colorAccent)));
1
Kuldeep Sakhiya

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. 

0
Stanislav Vincent