Подтвердить что ты не робот

Android: измените цвет рейтинга на золотой

Я хочу изменить цвет бара рейтинга на золотой.
Я не хочу настраивать звезды, просто хочу изменить цвет для API 16 или выше
Я пробовал следующие решения, но ни один из них не работал у меня

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
4b9b3361

Ответ 1

Этот параметр теперь включен в библиотеку AppCompat. Версия RatingBar AppCompat используется автоматически.

http://developer.android.com/reference/android/support/v7/widget/AppCompatRatingBar.html

Пример (из моего собственного приложения):

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

С темой:

<style name="RatingBar" parent="Theme.AppCompat">
    <item name="colorControlNormal">@color/duskYellow</item>
    <item name="colorControlActivated">@color/lightGrey</item>
</style>

Ответ 2

В API 21 и выше вы можете изменить цвет закрашенных звездочек с помощью

     android:progressTint="@color/color"

и цвет обводки с

     android:progressBackgroundTint="@color/color"

Ответ 3

Как вы уже упоминали, вы хотите изменить цвет звезды без использования drawable. Вы можете сделать это несколькими строками кода, как показано ниже.

RatingBar ratingBar = (RatingBar) findViewById(R.id.ratingBar);
Drawable drawable = ratingBar.getProgressDrawable();
drawable.setColorFilter(Color.parseColor("#0064A8"),PorterDuff.Mode.SRC_ATOP);

Ответ 4

Моя задача - изменить цвет панели рейтинга на основной цвет приложения для Android >= 14 SDK. Я решил эту проблему в коде и в 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();
        }
    }

И в 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

попробуйте это,

Вам нужны 3-звездочные изображения (red_star_full.png, red_star_half.png и red_star_empty.png) и один xml файл. Если вы хотите золотую звезду, тогда используйте изображение золотой звезды. это для красной звезды.

вы можете поместить ratingbar_color.xml в 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>

и в определении баров рейтинга используйте следующую команду.

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

Ответ 6

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

Ответ 7

Мой вариант использования состоял в том, чтобы показать разные цвета для разных рейтингов. Например:

1- Красный
2- оранжевый
3- Желтый
4- Светло-зеленый
5- темно-зеленый


Решение:

ratingBar.setOnRatingBarChangeListener(new RatingBar.OnRatingBarChangeListener() {

  @Override
  public void onRatingChanged(final RatingBar ratingBar, final float rating, final boolean fromUser) {
      setCurrentRating(rating);
    }
});

Затем в вашем методе 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));

    }
  }

Затем в вашем 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);
    }
  }

Благодаря этому ответу, который помог мне решить эту проблему. Надеюсь, это поможет кому-то!

Ответ 8

Простое решение, используйте AppCompatRatingBar и используйте приведенный ниже код

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

Ответ 9

Самое простое решение, которое я нашел, - это изменение определения цвета для цвета "colorAccent" в файле color.xml. Вся эта магия без дальнейшего кодирования.

Ответ 10

Из XML

android:progressTint="#ffff8800"

Программный:

Drawable drawableReview = bar.getProgressDrawable();
drawableReview.setColorFilter(Color.parseColor("#ffff8800"), 
PorterDuff.Mode.SRC_ATOP);

Ответ 11

Лучше всего использовать новые изображения для звезд в нужном цвете с помощью слоя-списка, как показано в этом ответе.

Невозможно просто изменить цвет, используя какое-либо свойство, в качестве ресурсов изображения для оценки баров. поэтому создание списка слоев с вашими изображениями - это только выход.

Ответ 12

Используйте этот код, чтобы перейти через линию

Drawable drawableReview = writeReviewRatingBar.getProgressDrawable();
        drawableReview.setColorFilter(Color.parseColor("#FFFDD433"), PorterDuff.Mode.SRC_ATOP);

Ответ 13

Изменение цвета в строке рейтинга и изменение размера:

<RatingBar
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:numStars="5"
    android:layout_marginLeft="10dp"
    android:layout_marginTop="5dp"
    style = "?android:attr/ratingBarStyleIndicator"
    android:progressTint="#ffff8800"
    android:rating="3.5"
    android:focusable="false"
    android:focusableInTouchMode="false"
    android:theme="@style/RatingBar" />