Android: 如何将评分条的颜色更改为金色

69

我希望将评分栏的颜色更改为金色。
我不想自定义星星,只想更改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
14个回答

1
如果您正在运行基于KitKat的系统,则默认情况下显示蓝色星号而不是黄色和金色。要更改为黄色和金色,请添加此行:style="@style/Base.Widget.AppCompat.RatingBar.Small"

1
我找到的最简单的解决方案是在color.xml中更改颜色"colorAccent"的定义。这就是整个魔法,无需进一步编码。

0
使用此代码来越过这条线。
Drawable drawableReview = writeReviewRatingBar.getProgressDrawable();
        drawableReview.setColorFilter(Color.parseColor("#FFFDD433"), PorterDuff.Mode.SRC_ATOP);

0

使用Kotlin扩展的另一种解决方案,允许通过评分范围设置不同的颜色:

扩展函数和属性:

var RatingBar.colorScheme: Map<Float, Int>?
    get() = getTag(R.id.rating_bar_color_scheme) as Map<Float, Int>?
    set(value) = setTag(R.id.rating_bar_color_scheme, value)

fun RatingBar.setColorByRating(rating: Float) {
    val colorScheme = getTag(R.id.rating_bar_color_scheme) as Map<Float, Int>
    colorScheme[rating]?.also { color -> setLayerColor(2, color) }
    setLayerColor(1, ContextCompat.getColor(context, android.R.color.transparent))
    setLayerColor(0, ContextCompat.getColor(context, android.R.color.darker_gray))
}

fun RatingBar.setLayerColor(layerIndex: Int, color: Int) {
    val drawable = progressDrawable as LayerDrawable
    drawable.getDrawable(layerIndex).also {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            DrawableCompat.setTint(it, color)
        } else {
            it.setColorFilter(color, PorterDuff.Mode.SRC_IN)
        }
    }
}

使用方法:

val red = ContextCompat.getColor(requireContext(), R.color.redColor)
val yellow = ContextCompat.getColor(requireContext(), R.color.yellowColor)
val green = ContextCompat.getColor(requireContext(), R.color.greenLightColor)

rbStars?.colorScheme = mapOf(
        1.0F to red,
        2.0F to red,
        3.0F to yellow,
        4.0F to green,
        5.0F to green
)

rbStars?.setColorByRating(rating)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接