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

Android自定义RatingBar实现未点击时切换为红色的方案咨询

要实现未点击时RatingBar星星为红色、选中后为黄色的效果,你需要给progressTint设置*状态选择器(ColorStateList)*替换固定色值,具体步骤如下:

  1. 在res目录下新建color文件夹(如果已存在可跳过),在color文件夹中创建rating_bar_color.xml文件,写入以下内容:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- 未选中、未点击状态的星星颜色:红色 -->
    <item android:color="#FF0000" android:state_selected="false" android:state_pressed="false"/>
    <!-- 选中、点击状态的星星颜色:保持你原来的黄色 -->
    <item android:color="#F9A825" android:state_selected="true"/>
    <item android:color="#F9A825" android:state_pressed="true"/>
</selector>
  1. 修改你的RatingBar布局代码,将progressTint的取值替换为刚才创建的状态选择器即可,修改后代码如下:
<RatingBar
    android:id="@+id/rate_star_location"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    style="?android:ratingBarStyleSmall"
    android:progressBackgroundTint="@color/grey"
    android:progressTint="@color/rating_bar_color"
    android:isIndicator="false"
    android:rating="0"
    android:numStars="5"
    android:stepSize="1"/>

低版本兼容方案

如果上述方法在Android 7.0以下系统不生效,可以用自定义进度Drawable的方式实现,兼容性更强:

  • 提前准备两张星星素材:红色未选中状态星星、黄色选中状态星星
  • 在res/drawable目录下创建rating_bar_drawable.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/你的红色星星资源名"/>
    <item android:id="@android:id/secondaryProgress" android:drawable="@drawable/你的红色星星资源名"/>
    <item android:id="@android:id/progress" android:drawable="@drawable/你的黄色星星资源名"/>
</layer-list>
  • 给RatingBar添加android:progressDrawable="@drawable/rating_bar_drawable"属性,同时移除原来的progressTint、progressBackgroundTint属性即可。

内容的提问来源于stack exchange,提问作者Muhammad Andika

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 10:45:04