星级评定控件RatingBar

正文

  一、结构

    public class RatingBar extends AbsSeekBar

 

    java.lang.Object

          android.view.View

                   android.widget.ProgressBar

                        android.widget.AbsSeekBar

                               android.widget.RatingBar

 

 

  二、概述

    

  RatingBar是基于SeekBarProgressBar的扩展,用星型来显示等级评定。使用RatingBar的默认大小时,用户可以触摸/拖动或使用键来设置评分,它有两种样式(小风格用ratingBarStyleSmall,大风格用ratingBarStyleIndicator),其中大的只适合指示,不适合于用户交互。

  当使用可以支持用户交互的RatingBar时,无论将控件(widgets)放在它的左边还是右边都是不合适的。

  只有当布局的宽被设置为wrap content时,设置的星星数量(通过函数setNumStars(int)或者在XML的布局文件中定义)将显示出来(如果设置为另一种布局宽的话,后果无法预知)。

  次级进度一般不应该被修改,因为他仅仅是被当作星型部分内部的填充背景。

  参见Form Stuff tutorial.

 

  三、嵌套类

  接口:RatingBar.OnRatingBarChangeListener

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

 

  四、XML属性

属性名称

描述

android:isIndicator

RatingBar是否是一个指示器(用户无法进行更改)

android:numStars

显示的星型数量必须是一个整形值,像“100”。

android:rating

默认的评分,必须是浮点类型,像“1.2”。

android:stepSize

评分的步长必须是浮点类型,像“1.2”。

 

  五、公共方法

 

public int getNumStars ()

    返回显示的星型数量

      返回值

                  显示的星型数量

 

  public RatingBar.OnRatingBarChangeListener getOnRatingBarChangeListener ()

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

 

  public float getRating ()

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

  返回值 : 当前的评分

 

  public float getStepSize ()

  获取评分条的步长

  返回值 : 步长

 

  public boolean isIndicator ()

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

 

  public void setIsIndicator (boolean isIndicator)

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

  参数 : isIndicator       Bool值,是否是一个指示器

 

  public synchronized void setMax (int max)

  设置评分等级的范围,从0max

  参数 : max         评分条最大范围。

 

  public void setNumStars (int numStars)

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

  参数 : numStars         星型的数量

 

  public void setOnRatingBarChangeListener (RatingBar.OnRatingBarChangeListener listener)

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

  参数 : listener  监听器

 

  public void setRating (float rating)

  设置分数(星型的数量)

  参数 : rating      设置的分数

 

  public void setStepSize (float stepSize)

  设置当前评分条的步长(step size

  参数 : stepSize 评分条的步进。例如:如果想要半个星星,它的值为0.5


  六、受保护方法

 

  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.进行编码。

             heightMeasureSpec   受主窗口支配的垂直空间要求。这个需求通过 View.MeasureSpec.进行编码。 

 

  七、补充

    文章链接

   Android 控件之RatingBar http://www.cnblogs.com/salam/archive/2010/10/06/1844741.html

Android更换RatingBar图片  http://www.iteye.com/topic/689272

[Android学习指南]RatingBar 评分条

 

      代码 :

复制代码
public class AndroidRatingBar extends Activity {
   
/** Called when the activity is first created. */
   @Override
   
public void onCreate(Bundle savedInstanceState) {
       
super.onCreate(savedInstanceState);
       setContentView(R.layout.main);

       
final RatingBar ratingBar_Small = (RatingBar)findViewById(R.id.ratingbar_Small);
       
final RatingBar ratingBar_Indicator = (RatingBar)findViewById(R.id.ratingbar_Indicator);
       
final RatingBar ratingBar_default = (RatingBar)findViewById(R.id.ratingbar_default);

       ratingBar_default.setOnRatingBarChangeListener(
new RatingBar.OnRatingBarChangeListener(){

   
public void onRatingChanged(RatingBar ratingBar, float rating,
     
boolean fromUser) {
    ratingBar_Small.setRating(rating);
    ratingBar_Indicator.setRating(rating);
    Toast.makeText(AndroidRatingBar.
this"rating:"+String.valueOf(rating),
      Toast.LENGTH_LONG).show();
   }});
   }
}
复制代码

      XML文件

复制代码
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:orientation
="vertical"
   android:layout_width
="fill_parent"
   android:layout_height
="fill_parent"
   
>
<TextView 
   
android:layout_width="fill_parent"
   android:layout_height
="wrap_content"
   android:text
="@string/hello"
   
/>
<RatingBar 
   
android:layout_width="wrap_content"
   android:layout_height
="wrap_content"
   style
="?android:attr/ratingBarStyleIndicator"
   android:id
="@+id/ratingbar_Indicator"
   
/>
<RatingBar 
   
android:layout_width="wrap_content"
   android:layout_height
="wrap_content"
   style
="?android:attr/ratingBarStyleSmall"
   android:id
="@+id/ratingbar_Small"
   android:numStars
="20"
   
/>
<RatingBar 
   
android:layout_width="wrap_content"
   android:layout_height
="wrap_content"
   style
="?android:attr/ratingBarStyle"
   android:id
="@+id/ratingbar_default"
   
/>
</LinearLayout>
复制代码
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值