[Android] RatingBar详解

一、结构
 
01 public class RatingBar extends AbsSeekBar
02   
03 java.lang.Object
04 android.view.View
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.

三、嵌套类

view source
print ?
01 接口:RatingBar.OnRatingBarChangeListener

一个回调函数,当星级进度改变时修改客户端的星级。

四、XML属性

属性名称 描述
android:isIndicator RatingBar是否是一个指示器(用户无法进行更改)
android:numStars 显示的星型数量,必须是一个整形值,像“100”。
android:rating 默认的评分,必须是浮点类型,像“1.2”。
android:stepSize 评分的步长,必须是浮点类型,像“1.2”。

五、公共方法

view source
pri ? nt
01 public int getNumStars ()

返回显示的星型数量
返回值
显示的星型数量

 

view source
print ?
01 public RatingBar.OnRatingBarChangeListener getOnRatingBarChangeListener ()

返回值
监听器(可能为空)监听评分改变事件

 

view source
print ?
01 public float getRating ()

获取当前的评分(填充的星型的数量)
返回值
当前的评分

 

view source
print ?
01 public float getStepSize ()

获取评分条的步长
返回值
步长

 

view source
print ?
01 public boolean isIndicator ()

返回值
判断当前的评分条是否仅仅是一个指示器(注:即能否被修改)

 

view source
print ?
01 public void setIsIndicator (boolean isIndicator)

设置当前的评分条是否仅仅是一个指示器(这样用户就不能进行修改操作了)
参数
isIndicator Bool值,是否是一个指示器

 

view source
print ?
01 public synchronized void setMax (int max)

设置评分等级的范围,从0到max
参数
max 评分条最大范围。

 

view source
print ?
01 public void setNumStars (int numStars)

设置显示的星型的数量。为了能够正常显示它们,建议将当前widget的布局宽度设置为
wrap content
参数
numStars 星型的数量

 

view source
print ?
01 public void setOnRatingBarChangeListener (RatingBar.OnRatingBarChangeListener listener)

设置当评分等级发生改变时回调的监听器
参数
listener 监听器

 

view source
print ?
01 public void setRating (float rating)

设置分数(星型的数量)
参数
rating 设置的分数

 

view source
print ?
01 public void setStepSize (float stepSize)

设置当前评分条的步长(step size)
参数
stepSize 评分条的步进。例如:如果想要半个星星,它的值为0.5。

 

六、受保护方法

view source
print ?
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文件

view source
print ?
01 public class AndroidRatingBar extends Activity {
02    /** Called when the activity is first created. */
03    @Override
04    public void onCreate(Bundle savedInstanceState) {
05        super.onCreate(savedInstanceState);
06        setContentView(R.layout.main);
07   
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);
11   
12        ratingBar_default.setOnRatingBarChangeListener(new RatingBar.OnRatingBarChangeListener(){
13   
14    public void onRatingChanged(RatingBar ratingBar, float rating,
15      boolean fromUser) {
16     ratingBar_Small.setRating(rating);
17     ratingBar_Indicator.setRating(rating);
18     Toast.makeText(AndroidRatingBar.this, "rating:"+String.valueOf(rating),
19       Toast.LENGTH_LONG).show();
20    }});
21    }
22 }

XML文件

view source
print ?
01 <?xml version="1.0" encoding="utf-8"?>
02 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
03    android:orientation="vertical"
04    android:layout_width="fill_parent"
05    android:layout_height="fill_parent"
06    >
07 <TextView
08    android:layout_width="fill_parent"
09    android:layout_height="wrap_content"
10    android:text="@string/hello"
11    />
12 <RatingBar
13    android:layout_width="wrap_content"
14    android:layout_height="wrap_content"
15    style="?android:attr/ratingBarStyleIndicator"
16    android:id="@+id/ratingbar_Indicator"
17    />
18 <RatingBar
19    android:layout_width="wrap_content"
20    android:layout_height="wrap_content"
21    style="?android:attr/ratingBarStyleSmall"
22    android:id="@+id/ratingbar_Small"
23    android:numStars="20"
24    />
25 <RatingBar
26    android:layout_width="wrap_content"
27    android:layout_height="wrap_content"
28    style="?android:attr/ratingBarStyle"
29    android:id="@+id/ratingbar_default"
30    />
31 </LinearLayout>

 

声明
欢迎转载,但请保留文章原始出处:)
博客园:http://www.cnblogs.com/
Android中文翻译组:http://www.cnblogs.com/over140/

你可能感兴趣的:(xml,android,layout,Class,float,encoding)