web-dev-qa-db-ja.com

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

このオプションは、AppCompatライブラリに含まれるようになりました。評価バーの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>
93
theblitz

API 21以降では、次のコマンドで塗りつぶされた星の色を変更できます

     Android:progressTint="@color/color"

とストロークの色

     Android:progressBackgroundTint="@color/color"
14
Raseem Ayatt

既に述べたように、ドロアブルを使用せずに星の色を変更したい。以下のように数行のコードで実行できます。

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

私のタスクは、レーティングバーの色を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
Malder

これを試して、

3つのスター画像(red_star_full.png、red_star_half.png、red_star_empty.png)と1つの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/>
3
Ganpat Kaliya
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

私の使用例は、評価ごとに異なる色を表示することでした。例えば ​​:

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

このおかげで answer が解決に役立った。それが誰かを助けることを願っています!

2

私が見つけた最も簡単な解決策は、color.xmlの色「colorAccent」の色定義を変更することです。それ以上のコーディングなしの完全な魔法です。

1

シンプルなソリューション、AppCompatRatingBarを使用し、以下のコードを使用

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

このコードを使用して、回線を乗り越えます

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

XMLから

Android:progressTint="#ffff8800"

プログラムで:

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