You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android RatingBar星星颜色修改失败求助:默认蓝色改绿色

解决Android RatingBar星星颜色修改为绿色的问题

嘿,我太懂你这种挫败感了——RatingBar自带的样式有时候就像个“油盐不进”的顽固分子,光用android:progressTint经常不生效,尤其是用ratingBarStyleSmall这种系统小样式的时候。别着急,我给你几个亲测有效的解决方案,按需求选就行:

方法一:自定义Drawable(最稳妥,兼容性拉满)

这个方法从根源上替换RatingBar的星星资源,完全不受系统样式限制,适合所有Android版本:

  1. 创建选中/未选中的星星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>
      
  2. 创建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>
    
  3. 在布局中使用自定义样式
    直接替换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"

方法二:多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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:33:14