Android 评级栏填充颜色

Android 评级栏填充颜色,android,ratingbar,Android,Ratingbar,对于填充十进制评级的评级栏颜色,适用于API低于23的评级,而不适用于API 23 代码如下: RatingBar ratingBar = (RatingBar) view.findViewById(R.id.ratingbar); ratingBar.setNumStars(5); ratingBar.setMax(5); ratingBar.setStepSize(0.1f); ratingBar.setRating(0.5); Drawable ratingBarColor = ratin

对于填充十进制评级的评级栏颜色,适用于API低于23的评级,而不适用于API 23

代码如下:

RatingBar ratingBar = (RatingBar) view.findViewById(R.id.ratingbar);
ratingBar.setNumStars(5);
ratingBar.setMax(5);
ratingBar.setStepSize(0.1f);
ratingBar.setRating(0.5);
Drawable ratingBarColor = ratingBar.getProgressDrawable();
DrawableCompat.setTint(ratingBarColor, ContextCompat.getColor(getActivity(), R.color.red));
这将用红色填充0.5(半)星的颜色。 但是对于android API 23(棉花糖),无论你设置的评级是什么,它都充满了明星。我可以知道API 23中发生了什么变化导致了这个问题,或者让我知道这个代码的问题吗

用于测试的手机(6.0):HTC One M8、Moto X Play、Nexus 6。 5.1.1:Moto X(第一代)、Nexus 4、Moto G1、G2


编辑:我通过删除API23中的setTint进行测试,该设置是将白色设置为十进制评级。因此,DrawableCompat可能会对设置十进制评级星形的颜色产生问题。

您可以创建自定义评级栏

1只需将xml文件放在您的drawable文件夹中,并将其命名为rating\u bar.xml

<?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/rating_empty" />
        <item android:id="@android:id/secondaryProgress" android:drawable="@drawable/rating_empty" />
        <item android:id="@android:id/progress" android:drawable="@drawable/rating_filled" />
    </layer-list>

2将另一个可绘制的xml文件命名为rating_empty.xml

<?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/rating_empty" />
        <item android:id="@android:id/secondaryProgress" android:drawable="@drawable/rating_empty" />
        <item android:id="@android:id/progress" android:drawable="@drawable/rating_filled" />
    </layer-list>


3为填充星创建一个可绘制的xml文件,并将其命名为rating\u filled.xml

<?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/rating_empty" />
        <item android:id="@android:id/secondaryProgress" android:drawable="@drawable/rating_empty" />
        <item android:id="@android:id/progress" android:drawable="@drawable/rating_filled" />
    </layer-list>


4转到“值”文件夹,打开style.xml并添加样式

<style name="customRatingBar" parent="@android:style/Widget.RatingBar">
        <item name="android:progressDrawable">@drawable/rating_bar</item>
    </style>

@可拉拔/额定钢筋
5只需使用您刚刚创建的自定义分级栏

    <RatingBar
    style="@style/customRatingBar"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="bottom|center"
    android:numStars="5" />

注意ic_评级的_星ic_未评级的_星是要在评级栏中显示的完整的填充星空星图像

希望这对你有用。。。祝你好运……

对于API 23(棉花糖),RatingBar确实遇到了全明星变色的问题(不管是1星还是5星),看起来总是5星

更新答案: 下面的代码可以工作

if (ratingBar.getProgressDrawable() instanceof LayerDrawable) {
    LayerDrawable stars = (LayerDrawable) ratingBar.getProgressDrawable();
    DrawableCompat.setTint(stars.getDrawable(2), color);
}
else {
    // for Android 4.3, ratingBar.getProgressDrawable()=DrawableWrapperHoneycomb
    DrawableCompat.setTint(ratingBar.getProgressDrawable(), color);
}
以下内容不适用于Mashmallow

Drawable ratingBarColor = ratingBar.getProgressDrawable();
DrawableCompat.setTint(ratingBarColor, ContextCompat.getColor(getActivity(), R.color.red));

在布局文件中,请记住使用android.support.v7.widget.appcompatingbar,而不是RatingBar。

是否尝试提供样式?style=“?android:attr/ratingBarStyle”?@Viren我正在程序化地设置自定义评级栏。我没有理解你。您正在创建自定义样式???我告诉你在你放评级条的地方用xml解释。@Viren谢谢。有什么不同吗?希望如此。请放一次。如何根据条件更改评级栏的颜色?。请在回答之前阅读问题。谢谢您的回答@Desmond。我会试试看。