如何调整ratingbar中星星的大小

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

一、属性值调整

<RatingBar
                        android:id="@+id/ratingBar1"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_gravity="center_horizontal"
                        android:isIndicator="true"
                        android:maxWidth="30dp"
                     android:maxHeight="30dp"
                        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文件中定义种样式: 
<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文件指定不同图层的图片资源
<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,就像上面这段代码,否则系统会不认!报设么错忘记了。。

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值