正文
一、結構
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,如需轉載請自行聯系原作者