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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM