Android 评级栏填充颜色
对于填充十进制评级的评级栏颜色,适用于API低于23的评级,而不适用于API 23 代码如下: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
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。我会试试看。