布局文件中定義控件以及屬性,這里主要需要指定的是總星星數量,和當前的值,也就是總級別跟當前級別的量。
<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.widget.ProgressBar
android.widget.RatingBar
二、概述
RatingBar是基於SeekBar和ProgressBar的擴展,用星型來顯示等級評定。使用RatingBar的默認大小時,用戶可以觸摸/拖動或使用鍵來設置評分,它有兩種樣式(小風格用ratingBarStyleSmall,大風格用ratingBarStyleIndicator),其中大的只適合指示,不適合於用戶交互。
當使用可以支持用戶交互的RatingBar時,無論將控件(widgets)放在它的左邊還是右邊都是不合適的。
只有當布局的寬被設置為wrap content時,設置的星星數量(通過函數setNumStars(int)或者在XML的布局文件中定義)將顯示出來(如果設置為另一種布局寬的話,后果無法預知)。
次級進度一般不應該被修改,因為他僅僅是被當作星型部分內部的填充背景。
三、嵌套類
接口: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手機開發者論壇)
Java文件
@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文件
<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