01 | public class RatingBar extends AbsSeekBar |
05 | android.widget.ProgressBar |
06 | android.widget.AbsSeekBar |
07 | android.widget.RatingBar |
二、概述
RatingBar是基于SeekBar和ProgressBar的扩展,用星型来显示等级评定。使用RatingBar的默认大小时,用户可以触摸/拖动或使用键来设置评分,它有两种样式(小风格用ratingBarStyleSmall,大风格用ratingBarStyleIndicator),其中大的只适合指示,不适合于用户交互。
当使用可以支持用户交互的RatingBar时,无论将控件(widgets)放在它的左边还是右边都是不合适的。
只有当布局的宽被设置为wrap content时,设置的星星数量(通过函数setNumStars(int)或者在XML的布局文件中定义)将显示出来(如果设置为另一种布局宽的话,后果无法预知)。
次级进度一般不应该被修改,因为他仅仅是被当作星型部分内部的填充背景。
参见Form Stuff tutorial.
三、嵌套类
01 | 接口:RatingBar.OnRatingBarChangeListener |
一个回调函数,当星级进度改变时修改客户端的星级。
四、XML属性
属性名称 | 描述 |
android:isIndicator | RatingBar是否是一个指示器(用户无法进行更改) |
android:numStars | 显示的星型数量,必须是一个整形值,像“100”。 |
android:rating | 默认的评分,必须是浮点类型,像“1.2”。 |
android:stepSize | 评分的步长,必须是浮点类型,像“1.2”。 |
五、公共方法
01 | public int getNumStars () |
返回显示的星型数量
返回值
显示的星型数量
01 | public RatingBar.OnRatingBarChangeListener getOnRatingBarChangeListener () |
返回值
监听器(可能为空)监听评分改变事件
01 | public float getRating () |
获取当前的评分(填充的星型的数量)
返回值
当前的评分
01 | public float getStepSize () |
获取评分条的步长
返回值
步长
01 | public boolean isIndicator () |
返回值
判断当前的评分条是否仅仅是一个指示器(注:即能否被修改)
01 | public void setIsIndicator ( boolean isIndicator) |
设置当前的评分条是否仅仅是一个指示器(这样用户就不能进行修改操作了)
参数
isIndicator Bool值,是否是一个指示器
01 | public synchronized void setMax ( int max) |
设置评分等级的范围,从0到max
参数
max 评分条最大范围。
01 | public void setNumStars ( int numStars) |
设置显示的星型的数量。为了能够正常显示它们,建议将当前widget的布局宽度设置为
wrap content
参数
numStars 星型的数量
01 | public void setOnRatingBarChangeListener (RatingBar.OnRatingBarChangeListener listener) |
设置当评分等级发生改变时回调的监听器
参数
listener 监听器
01 | public void setRating ( float rating) |
设置分数(星型的数量)
参数
rating 设置的分数
01 | public void setStepSize ( float stepSize) |
设置当前评分条的步长(step size)
参数
stepSize 评分条的步进。例如:如果想要半个星星,它的值为0.5。
六、受保护方法
01 | protected synchronized void onMeasure ( int widthMeasureSpec, int heightMeasureSpec) |
权衡 view 和 content 来决定它的宽度和高度的整齐。它被measure(int, int) 调用 并且应该被子类所覆盖,以便提供准确高效的布局测量。
规定: 当覆盖这个方法的时候,你必须调用 setMeasuredDimension(int, int)以便存储精确的视图的宽和高。如果不这样做的话将触发llegalStateException异常,被函数 measure(int, int)抛出。调用父类 onMeasure(int, int)是合理的。
尺寸的基本类的实现默认是背景大小,除非通过MeasureSpec允许大的尺寸。子类应该覆盖 onMeasure(int, int) 以便提供更好的布局大小。
如果这个方法被覆盖,子类应该负责确保标准的宽和高至少是视图的最小宽度和高度的值(分别为getSuggestedMinimumHeight() 和 getSuggestedMinimumWidth()两方法)。
参数
widthMeasureSpec 受主窗口支配的水平空间要求。这个需求通过 View.MeasureSpec.进行编码。
七、补充
文章链接
Android 控件之RatingBar评分条
Android更换RatingBar图片
[Android学习指南]RatingBar 评分条
示例代码(代码转载自Android手机开发者论坛)
Java文件
01 | public class AndroidRatingBar extends Activity { |
02 | /** Called when the activity is first created. */ |
04 | public void onCreate(Bundle savedInstanceState) { |
05 | super .onCreate(savedInstanceState); |
06 | setContentView(R.layout.main); |
08 | final RatingBar ratingBar_Small = (RatingBar)findViewById(R.id.ratingbar_Small); |
09 | final RatingBar ratingBar_Indicator = (RatingBar)findViewById(R.id.ratingbar_Indicator); |
10 | final RatingBar ratingBar_default = (RatingBar)findViewById(R.id.ratingbar_default); |
12 | ratingBar_default.setOnRatingBarChangeListener( new RatingBar.OnRatingBarChangeListener(){ |
14 | public void onRatingChanged(RatingBar ratingBar, float rating, |
16 | ratingBar_Small.setRating(rating); |
17 | ratingBar_Indicator.setRating(rating); |
18 | Toast.makeText(AndroidRatingBar. this , "rating:" +String.valueOf(rating), |
19 | Toast.LENGTH_LONG).show(); |
XML文件
01 | <?xml version= "1.0" encoding= "utf-8" ?> |
03 | android:orientation= "vertical" |
04 | android:layout_width= "fill_parent" |
05 | android:layout_height= "fill_parent" |
08 | android:layout_width= "fill_parent" |
09 | android:layout_height= "wrap_content" |
10 | android:text= "@string/hello" |
13 | android:layout_width= "wrap_content" |
14 | android:layout_height= "wrap_content" |
15 | style= "?android:attr/ratingBarStyleIndicator" |
16 | android:id= "@+id/ratingbar_Indicator" |
19 | android:layout_width= "wrap_content" |
20 | android:layout_height= "wrap_content" |
21 | style= "?android:attr/ratingBarStyleSmall" |
22 | android:id= "@+id/ratingbar_Small" |
26 | android:layout_width= "wrap_content" |
27 | android:layout_height= "wrap_content" |
28 | style= "?android:attr/ratingBarStyle" |
29 | android:id= "@+id/ratingbar_default" |
声明
欢迎转载,但请保留文章原始出处:)
博客园:http://www.cnblogs.com/
Android中文翻译组:http://www.cnblogs.com/over140/