Android修改原生RatingBar的颜色

首先,你的build.gradle里面要依赖

dependencies {  
    compile 'com.android.support:appcompat-v7:X.X.X' // where X.X.X version
}
 
 
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

然后让你的activity继承于Android.support.v7.app.AppCompatActivity

public class MainActivity extends AppCompatActivity {  
    ...
}
 
 
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

在style.xml里面声明如下属性

 <style name="RatingBar" parent="Theme.AppCompat">
        <item name="colorControlNormal">@color/blue</item>
        <item name="colorControlActivated">@color/red_warn</item>
    </style>
 
 
  • 1
  • 2
  • 3
  • 4
  • 1
  • 2
  • 3
  • 4

colorControlNormal代表未选中时的颜色,colorControlActivated代表选中时的颜色 
然后在activity的xml中的ratingbar的控件里写如下代码

 <android.support.v7.widget.AppCompatRatingBar
            android:id="@+id/rating_bar"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            style="?attr/ratingBarStyleIndicator"
            android:isIndicator="false"
            android:theme="@style/RatingBar"
            />
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

这样,用系统的ratingbar就不会出现部分机型有一部分星星被遮挡了出不来的问题,而且还可以自己设定 ratingbar的颜色

**

更新

**!第二种方法!如下代码也可以修改ratingbar的颜色

<android.support.v7.widget.AppCompatRatingBar
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/rb"
        android:stepSize="1"
        android:rating="5"
        style="?attr/ratingBarStyle"
        android:layout_marginTop="10dip"
        android:progressTint="@color/orange_main_color"
        android:progressBackgroundTint="@color/app_main_gray_bg"
        android:secondaryProgressTint="@color/app_main_gray_bg"
       />
如何调整ratingbar中星星的大小

实验室引进了zwatch做开发,其中一个比较大的问题就是如何对240*240的小屏幕做屏幕适应。今天做睡眠跟踪中的睡眠质量评级,引进了特别喜欢的ratingbar,结果评级star太大,导致星星越界,最后一个星星直接超出了屏幕外。网上大致搜了三种方法,只有一种还是比较符合胃口的,在这里做一个简单的总结。

一、属性值调整

[html]  view plain  copy
  1. <RatingBar  
  2.                         android:id="@+id/ratingBar1"  
  3.                         android:layout_width="wrap_content"  
  4.                         android:layout_height="wrap_content"  
  5.                         android:layout_gravity="center_horizontal"  
  6.                         android:isIndicator="true"  
  7.                         <strong><span style="color:#ff0000;">android:maxWidth="30dp"  
  8.                      android:maxHeight="30dp"</span></strong>  
  9.                         android:soundEffectsEnabled="true" />  

按说这应该是最容易想到的方法。但是很遗憾,安卓开发工程师并没有为我们考虑的那么细致,标红的这两个属性完全不是我们想象中的那样把star调小为对应的尺寸,这两个属性和大多数控件的属性意思一样,仅仅是ratingbar整体的大小。坑爹的是,如果ratingbar整体变小了,star宁肯丢失也不会跟随整体而放大或缩小。这一点我认为platform新版本应该顺应民意!很不自然的属性。

二、style调整

代码还是上面的那个代码,唯一区别是加一行属性:

style="?android:attr/ratingBarStyleSmall" 
这样做之后,星星真的变小了!看见星星变小的那一刻我tmd眼泪都出来了,这也忒小了吧!!

真是受不了,到手机上以后就是笔尖的大小。
三、自定义style
虽然耗费了一晚上完成这个实验,但是还是觉得学到了些东西。在尝试第三种方法之前,我看过了各种各样的帖子,都在询问怎么才能不自定义而后直接调用云云。很遗憾,一直找到最底层的platform的style,发现安卓只提供了StyleSmall和Style以及一个Indicator三种style,
style="?android:attr/ratingBarStyleSmall"
style="?android:attr/ratingBarStyle"
style="?android:attr/ratingBarStyleIndicator"
大小都不满意。最后决定还是使用最麻烦的方法。

 下面我就来讲讲如何制作自己的RatingBar样式。 
       1、在res/data/style.xml文件中定义种样式: 

   
   
[html] view plain copy
  1. <resources>  
  2. <style name="myratingbar"   
  3. parent="@android:style/Widget.RatingBar.Small">  
  4.   
  5.   
  6. <item   
  7. name="android:progressDrawable">  
  8. @drawable/myratingbar  
  9. </item>  
  10. <item name="android:minHeight">36dip</item>  
  11. <item name="android:maxHeight">36dip</item>  
  12. <style>  
  13.   
  14.   
  15. </resources>  
  其中继承的父类可以选择RatingBar,RatingBar.Indicator,RatingBar.Small; 
        大小可以自己定义。 
        注意:RatingBar,RatingBar.Indicator,RatingBar.Small的不同点除了他们的显示大小不同以外,主要的还有Ratingbar中的IsIndicator属性是false,其他两种是true.该属性为false表示可以相应用的点击事件,通过这种方式可以和用户交互。
 2、在res/drawable/myratingbar.xml文件指定不同图层的图片资源

   
   
[html] view plain copy
  1. <layer-list xmlns:android="http://schemas.android.com/apk/res/android">  
  2.   
  3. <item android:id="@+android:id/background"   
  4. android:drawable="@drawable/myratingbar_off" />  
  5.   
  6. <item android:id="@+android:id/secondaryProgress"  
  7. android:drawable="@drawable/myratingbar_half" />  
  8.   
  9. <item android:id="@+android:id/progress"   
  10. android:drawable="@drawable/myratingbar_on" />  
  11.   
  12. </layer-list>   
以上第三种方法源自网络,非原创,感谢原作者提供。设置完以上两个文件后,再在xml布局文件中设置@style/myratingbar就可以了。
另外一个小细节:一定要注意style要写成layer-list,就像上面这段代码,否则系统会不认!报设么错忘记了。。

自己定义RatingBar的样式:

xml文件代码

<RatingBar
    android:id="@+id/ratingBar1"
    style="@style/myRatingBar"
    android:layout_width="wrap_content"
    android:layout_height="33dp"
    android:layout_centerVertical="true"
    android:layout_centerHorizontal="true"
    android:layout_marginLeft="20dp"
    android:layout_marginRight="20dp"
    android:numStars="5"
    android:rating="5"
    android:stepSize="1.0" />

部分属性含义:

numStars :星星个数

rating : 默认选中几个星星

stepSize : 每次减少/增加多少

重点是:

 style="@style/myRatingBar"
自定义的style:

<style name="myRatingBar" parent="@android:style/Widget.RatingBar">
    <item name="android:progressDrawable">@drawable/em_ratingbar_drawable</item>
    <item name="android:minHeight">50dp</item>
    <item name="android:maxHeight">50dp</item>
</style>
重点是:

 <item name="android:progressDrawable">@drawable/em_ratingbar_drawable</item>

自己切星星的图片,弄出来的是多大,就是多大

测试中感觉,minHeight跟maxHerght没有呀

drawable中的em_ratingbar_drawable

<?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="@mipmap/em_icon_star_normal">
    </item>
    <item
        android:id="@android:id/secondaryProgress"
        android:drawable="@mipmap/em_icon_star_normal">
    </item>
    <item
        android:id="@android:id/progress"
        android:drawable="@mipmap/em_icon_star_select">
    </item>

</layer-list>
注意:必须是layer_list




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值