• Android星星评分控件RatingBar的使用


    Android的开发中,有一个叫做评分控件RatingBar,我们可以使用该控件做等级划分、评分等作用,星星形状显示,也可以半星级别,我们来看一下评分控件如何使用。

    布局文件中定义控件以及属性,这里主要需要指定的是总星星数量,和当前的值,也就是总级别跟当前级别的量。

    <RatingBar
       android:id="@+id/ratingBar"
       android:numStars="5" //总级别,总分,星星个数
       android:rating="1.5"  //当前级别,分数,星星个数
       android:layout_width="wrap_content"
       android:layout_height="wrap_content">
    </RatingBar>

    评分控件中两个比较重要的方法:

    RatingBar.setRating(flaot rating);
    RatingBar.getRating();

    事件监听处理:

    RatingBar.setOnRatingBarChangeListener(newOnRatingBarChangeListener(){
    @Override
        public voidonRatingChanged(RatingBar ratingBar, floatrating,  boolean fromUser) {
              //doing actions
        }
    });

    本文出自http://1622511.blog.51cto.com/1612511/567316

    Android 中文 API  ——RatingBar 

    正文

      一、结构

        publicclass RatingBar extends AbsSeekBar

        Java.lang.Object

             android.view.View

                      android.widget.ProgressBar

                         android.widget.AbsSeekBar

                                android.widget.RatingBar

      二、概述

        

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

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

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

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

      参见FormStuff tutorial.

      三、嵌套类

      接口:RatingBar.OnRatingBarChangeListener

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

      四、XML属性

    属性名称

    描述

    android:isIndicator

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

    android:numStars

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

    android:rating

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

    android:stepSize

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

      五、公共方法

    public int getNumStars ()

        返回显示的星型数量

          返回值

                     显示的星型数量

      public RatingBar.OnRatingBarChangeListenergetOnRatingBarChangeListener ()

    返回值

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

      public float getRating ()

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

      返回值

      当前的评分

      public float getStepSize ()

      获取评分条的步长

      返回值

      步长

      public boolean isIndicator ()

    返回值

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

      public void setIsIndicator (booleanisIndicator)

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

      参数

      isIndicator     Bool值,是否是一个指示器

      public synchronized void setMax (intmax)

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

      参数

      max       评分条最大范围。

      public void setNumStars (intnumStars)

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

    wrap content

      参数

      numStars       星型的数量

      public void setOnRatingBarChangeListener(RatingBar.OnRatingBarChangeListener listener)

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

      参数

      listener 监听器

      public void setRating (floatrating)

      设置分数(星型的数量)

      参数

      rating    设置的分数

      public void setStepSize (floatstepSize)

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

      参数

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


      六、受保护方法

      protectedsynchronized void onMeasure (intwidthMeasureSpec, 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评分条

                      Android更换RatingBar图片

                      [Android学习指南]RatingBar评分条

        示例代码(代码转载自Android手机开发者论坛

    Java文件

     
    public class AndroidRatingBar extends Activity {
       
       @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>
     

    结束

      本文为"madgoat"和"wallace2010"联合署名,原因是翻译重了,不过两个翻译得都很好,这样翻译重的事件也将随着管理的完善得意解决,感谢两位的相互理解,感谢大家的支持!

    http://www.cnblogs.com/over140/archive/2010/11/18/1880391.html

     
  • 相关阅读:
    mysql数据库小常识
    CSP.ac #61乘积求和
    CSP.ac #60
    CSP.ac低仿机器人(T1-1)
    题解:swj社会摇基础第一课
    题解:T103180 しろは的军训列队
    关 于 篮 球
    关 于 自 恋
    题解:T103342 Problem A. 最近公共祖先
    关 于 匀 变 速 直 线 运 动 的 推 论
  • 原文地址:https://www.cnblogs.com/xgjblog/p/5661301.html
Copyright © 2020-2023  润新知