评分栏填充颜色android

时间:2016-02-22 09:20:10

标签: android ratingbar

为了填充小数等级的评级栏中的颜色,对于低于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用于设置十进制等级星的颜色。

2 个答案:

答案 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>填充星星 空星 图片,您想要在评分栏中显示。

希望这对你有用......祝你好运......