天天看点

Android 中文 API (40) —— RatingBar

正文

  一、结构

    public class RatingBar extends AbsSeekBar

    java.lang.Object

                   android.widget.ProgressBar

                               android.widget.RatingBar

  二、概述

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

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

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

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

  三、嵌套类

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

  四、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)

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

  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)

    参数

  七、补充

    文章链接

      Java文件

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_height="wrap_content"

   android:text="@string/hello"

   />

<RatingBar 

   android:layout_width="wrap_content"

   style="?android:attr/ratingBarStyleIndicator"

   android:id="@+id/ratingbar_Indicator"

   style="?android:attr/ratingBarStyleSmall"

   android:id="@+id/ratingbar_Small"

   android:numStars="20"

   style="?android:attr/ratingBarStyle"

   android:id="@+id/ratingbar_default"

</LinearLayout>

本文转自over140 51CTO博客,原文链接:http://blog.51cto.com/over140/582621,如需转载请自行联系原作者

继续阅读