Android自定义RatingBar实现未点击时切换为红色的方案咨询
要实现未点击时RatingBar星星为红色、选中后为黄色的效果,你需要给progressTint设置*状态选择器(ColorStateList)*替换固定色值,具体步骤如下:
- 在
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>
- 修改你的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
相关产品推荐
相关产品推荐

