为了填充小数等级的评级栏中的颜色,对于低于23的API并且在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(MarshMallow),无论你设置什么评级,它都会填满所有的星。我知道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用于设置十进制等级星的颜色。
答案 0 :(得分:4)
对于API 23(MarshMallow),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.AppCompatRatingBar,而不是RatingBar。
答案 1 :(得分:2)
您可以制作自定义评级栏
1只需在您的drawable文件夹中创建xml文件并将其命名为 rating_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
<item android:state_pressed="true"
android:state_window_focused="true"
android:drawable="@drawable/ic_unrated_star" />
<item android:state_focused="true"
android:state_window_focused="true"
android:drawable="@drawable/ic_unrated_star" />
<item android:state_selected="true"
android:state_window_focused="true"
android:drawable="@drawable/ic_unrated_star" />
<item android:drawable="@drawable/ic_unrated_star" />
3为填充星制作另一个可绘制的xml文件,并将其命名为 rating_filled.xml
<item android:state_pressed="true"
android:state_window_focused="true"
android:drawable="@drawable/ic_rated_star" />
<item android:state_focused="true"
android:state_window_focused="true"
android:drawable="@drawable/ic_rated_star" />
<item android:state_selected="true"
android:state_window_focused="true"
android:drawable="@drawable/ic_rated_star" />
<item android:drawable="@drawable/ic_rated_star" />
4转到您的values文件夹并打开 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_rated_star 和 ic_unrated_star 是完整的 < em>填充星星 和 空星 图片,您想要在评分栏中显示。
希望这对你有用......祝你好运......