首先,你的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
- <RatingBar
- android:id="@+id/ratingBar1"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="center_horizontal"
- android:isIndicator="true"
- <strong><span style="color:#ff0000;">android:maxWidth="30dp"
- android:maxHeight="30dp"</span></strong>
- 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
- <resources>
- <style name="myratingbar"
- parent="@android:style/Widget.RatingBar.Small">
-
-
- <item
- name="android:progressDrawable">
- @drawable/myratingbar
- </item>
- <item name="android:minHeight">36dip</item>
- <item name="android:maxHeight">36dip</item>
- <style>
-
-
- </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
- <layer-list xmlns:android="http://schemas.android.com/apk/res/android">
-
- <item android:id="@+android:id/background"
- android:drawable="@drawable/myratingbar_off" />
-
- <item android:id="@+android:id/secondaryProgress"
- android:drawable="@drawable/myratingbar_half" />
-
- <item android:id="@+android:id/progress"
- android:drawable="@drawable/myratingbar_on" />
-
- </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