Android RatingBar星星颜色修改失败求助:默认蓝色改绿色
解决Android RatingBar星星颜色修改为绿色的问题
嘿,我太懂你这种挫败感了——RatingBar自带的样式有时候就像个“油盐不进”的顽固分子,光用android:progressTint经常不生效,尤其是用ratingBarStyleSmall这种系统小样式的时候。别着急,我给你几个亲测有效的解决方案,按需求选就行:
方法一:自定义Drawable(最稳妥,兼容性拉满)
这个方法从根源上替换RatingBar的星星资源,完全不受系统样式限制,适合所有Android版本:
创建选中/未选中的星星Drawable
在res/drawable目录下新建两个矢量图XML文件:- 选中状态(绿色星星):
rating_star_filled.xml<?xml version="1.0" encoding="utf-8"?> <vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="24dp" android:height="24dp" android:viewportWidth="24" android:viewportHeight="24" android:tint="@color/green"> <path android:fillColor="@android:color/white" android:pathData="M12,17.27L18.18,21l-1.64,-7.03L22,9.24l-7.19,-0.61L12,2 9.19,8.63 2,9.24l5.46,4.73L5.82,21z"/> </vector> - 未选中状态(灰色星星):
rating_star_empty.xml<?xml version="1.0" encoding="utf-8"?> <vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="24dp" android:height="24dp" android:viewportWidth="24" android:viewportHeight="24" android:tint="@color/gray"> <path android:fillColor="@android:color/white" android:pathData="M12,17.27L18.18,21l-1.64,-7.03L22,9.24l-7.19,-0.61L12,2 9.19,8.63 2,9.24l5.46,4.73L5.82,21z"/> </vector>
- 选中状态(绿色星星):
创建RatingBar的组合Drawable
再新建一个rating_bar_style.xml,把上面两个星星资源关联到RatingBar的不同状态:<?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_star_empty"/> <item android:id="@android:id/secondaryProgress" android:drawable="@drawable/rating_star_empty"/> <item android:id="@android:id/progress" android:drawable="@drawable/rating_star_filled"/> </layer-list>在布局中使用自定义样式
直接替换RatingBar的progressDrawable属性,如果你想保留小样式的尺寸,可以自定义一个style:- 方式1:直接在布局中引用
<RatingBar android:id="@+id/rb" android:layout_width="wrap_content" android:layout_height="wrap_content" android:isIndicator="false" android:numStars="5" android:stepSize="1" android:progressDrawable="@drawable/rating_bar_style" android:layout_gravity="center"/> - 方式2:自定义小样式(保持原有尺寸)
在res/values/styles.xml中添加:
然后布局中使用:<style name="CustomSmallRatingBar" parent="android:Widget.RatingBar.Small"> <item name="android:progressDrawable">@drawable/rating_bar_style</item> </style>style="@style/CustomSmallRatingBar"
- 方式1:直接在布局中引用
方法二:多Tint属性组合(快速尝试,可能受系统版本限制)
如果不想自定义Drawable,可以试试同时设置三个Tint属性——因为系统RatingBar的背景、二级进度、进度是三个不同的图层,只设置progressTint可能覆盖不全:
<RatingBar android:id="@+id/rb" android:layout_width="wrap_content" android:layout_height="wrap_content" android:isIndicator="false" style="?android:attr/ratingBarStyleSmall" android:numStars="5" android:stepSize="1" android:progressTint="@color/green" android:secondaryProgressTint="@color/green" android:backgroundTint="@color/gray" android:layout_gravity="center"/>
⚠️ 注意:这个方法在部分旧Android版本或者特定系统定制ROM上可能仍然不生效,不如方法一可靠。
方法三:使用Material Components RatingBar(推荐给Material项目)
如果你的项目已经引入了Material Design库,直接用MaterialRatingBar会省心很多,它的Tint属性支持更完善:
<com.google.android.material.ratingbar.MaterialRatingBar android:id="@+id/rb" android:layout_width="wrap_content" android:layout_height="wrap_content" android:isIndicator="false" android:numStars="5" android:stepSize="1" app:ratingBarStyle="small" app:progressTint="@color/green" app:secondaryProgressTint="@color/light_green" app:backgroundTint="@color/gray" android:layout_gravity="center"/>
记得确保你的项目依赖了Material组件库哦。
内容的提问来源于stack exchange,提问作者anta40
相关产品推荐
相关产品推荐

