API Demos 2.3 學習筆記 (12)-- Views->Rating Bar
更多精彩內容,請點擊閱讀:《API Demos 2.3 學習筆記》
ratingBarStyle 默認風格
ratingBarStyleSmall 小風格
ratingBarStyleIndicator 大風格
其中,默認風格的RatingBar是我們通常使用的可以交互的,而後麵兩種不能進行進行交互,隻能作為指示牌。設置RatingBar樣式的方法是在xml布局文件中RatingBar控件內設置style:
下麵我們以RatingBar為例,簡單介紹如何創建三種不同樣式的RatingBar。
1、 ratingBarStyle 默認風格
<RatingBar android: android:layout_width="wrap_content" android:layout_height="wrap_content" android:numStars="3" android:rating="2.5" android:stepSize="0.5" />注:android:numStars="3" 屬性用來設置星星總個數,必須是一個整形值,例如 100 。
android:rating="2.5" 屬性用來設置初始星星評分星星數目,必須是浮點類型,例如 1.2。
android:stepSize="0.5" 屬性用來設置步長,即一次增加或者減少的星星數目是這個數字的整數倍。必須是浮點類型,例如 0.5。
2、ratingBarStyleSmall 小風格
<RatingBar android: android:layout_marginLeft="5dip" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical" />
3、ratingBarStyleIndicator 大風格
<RatingBar android: android:layout_marginLeft="5dip" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical" />
RatingBar主要通過設置監聽器OnRatingBarChangeListener來響應用戶點擊的。具體使用方法如下:
// 通過findViewById方法獲得RatingBar對象 RatingBar mRatingBar = (RatingBar) findViewById(R.id.ratingbar); mRatingBar.setOnRatingBarChangeListener(mRatingBarChangeListener); //創建RatingBar監聽器 RatingBar.OnRatingBarChangeListener mRatingBarChangeListener = new RatingBar.OnRatingBarChangeListener() { public void onRatingChanged(RatingBar ratingBar, float rating, boolean fromUser) { // TODO 執行用戶點擊RatingBar後的響應動作 final int mNumStars = ratingBar.getNumStars(); //獲取RatingBar總星星數 float mrating = rating; //用戶點擊評定後的評分(高亮的星星個數) if(fromUser){ // TODO } else{ // TODO } } };注:創建 RatingBar 監聽器時,需要注意的是,3個參數以及它們對應的含義如下:
ratingBar: 由於多個RatingBar可以同時指定同一個RatingBar 監聽器 。該參數就是當前觸發RatingBar監聽器的那一個RatingBar對象。
rating: 當前評級分數。取值範圍從0到RatingBar 的總星星數。
fromUser: 如果觸發監聽器的是來自用戶觸屏點擊或軌跡球左右移動,則為true。
下麵我們進行實例代碼解析:
res-layout-ratingbar_1.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:andro android:orientation="vertical" android:paddingLeft="10dip" android:layout_width="match_parent" android:layout_height="match_parent"> <!-- 一個星星數為3,評分2.5個星星的默認RatingBar --> <RatingBar android: android:layout_width="wrap_content" android:layout_height="wrap_content" android:numStars="3" android:rating="2.5" android:stepSize="0.5" /> <!-- 一個星星數為5,評分2.5個星星的默認RatingBar 默認步長0.5--> <RatingBar android: android:layout_width="wrap_content" android:layout_height="wrap_content" android:numStars="5" android:rating="2.25" android:stepSize="0.5" /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="10dip"> <TextView android: android:layout_width="wrap_content" android:layout_height="wrap_content" /> <!-- 一個stlye為ratingBarStyleSmall的RatingBar,不支持交互 --> <RatingBar android: android:layout_marginLeft="5dip" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical" /> </LinearLayout> <!-- 一個stlye為indicator_ratingbar的RatingBar,不支持交互 --> <RatingBar android: android:layout_marginLeft="5dip" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical" /> </LinearLayout>
src-com.example.android.apis.view-RatingBar1.java
package com.example.android.apis.view; import android.app.Activity; import android.os.Bundle; import android.widget.RatingBar; import android.widget.TextView; import com.example.android.apis.R; /** * 演示如何使用rating bar */ public class RatingBar1 extends Activity implements RatingBar.OnRatingBarChangeListener { RatingBar mSmallRatingBar; RatingBar mIndicatorRatingBar; TextView mRatingText; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.ratingbar_1); // 通過findViewById方法獲得一個TextView對象 mRatingText = (TextView) findViewById(R.id.rating); // 通過findViewById方法獲得兩個用作指示牌的RatingBar對象 mIndicatorRatingBar = (RatingBar) findViewById(R.id.indicator_ratingbar); mSmallRatingBar = (RatingBar) findViewById(R.id.small_ratingbar); // 通過findViewById方法獲得兩個可以交互的RatingBar對象,並設置監聽器 ((RatingBar)findViewById(R.id.ratingbar1)).setOnRatingBarChangeListener(this); ((RatingBar)findViewById(R.id.ratingbar2)).setOnRatingBarChangeListener(this); } public void onRatingChanged(RatingBar ratingBar, float rating, boolean fromTouch) { final int numStars = ratingBar.getNumStars(); //顯示當前星星總數多少,被選中高亮的星星數多少 mRatingText.setText( getString(R.string.ratingbar_rating) + " " + rating + "/" + numStars); //當用戶點擊上麵可以交互的RatingBar,觸發監聽器,在這裏更新兩個作為指示牌作用的RatingBar對象的三個參數 //更新兩個作為指示牌作用的RatingBar對象的星星總數 if (mIndicatorRatingBar.getNumStars() != numStars) { mIndicatorRatingBar.setNumStars(numStars); mSmallRatingBar.setNumStars(numStars); } //更新兩個作為指示牌作用的RatingBar對象的星星數(被選中高亮) if (mIndicatorRatingBar.getRating() != rating) { mIndicatorRatingBar.setRating(rating); mSmallRatingBar.setRating(rating); } //更新兩個作為指示牌作用的RatingBar對象的步長值 final float ratingBarStepSize = ratingBar.getStepSize(); if (mIndicatorRatingBar.getStepSize() != ratingBarStepSize) { mIndicatorRatingBar.setStepSize(ratingBarStepSize); mSmallRatingBar.setStepSize(ratingBarStepSize); } } }
知識點1:android:layout_marginLeft="5dip"
該屬性表示該空間離父控件的左邊距離為5個dip。其他android:layout_marginRight等屬性的含義與之類似。 關於dip等android單位的詳細介紹,請點擊閱讀:《Android 係統Dimension和間距參數詳解》和《Android單位區別與轉化》
知識點2:android:layout_gravity="center_vertical"
該屬性表示相對於該控件的父控件而言,該控件在父控件中的什麼位置。還有一個屬性 android:gravity則表示對於該控件而言,控件內部的文本顯示在該控件的什麼位置。兩個屬性容易混淆,切記進行區分。關於兩個屬性取值含義以及兩者的區別等更詳細的信息,請點擊閱讀:《android:layout_gravity 和 android:gravity 的區別》
知識點3:如果默認的 RatingBar不能滿足您的需求,您不想用星星,而想用其他的自定義圖片的話,請點擊閱讀:《 給RatingBar改圖片》
預覽效果:
最後更新:2017-04-02 06:51:58
上一篇:
c、c++、java的區別
下一篇:
android menu 實現動態修改menu
你必須了解的基礎的 Linux 網絡命令
Android fragments實例之間的通信
兩位 MIT 密碼學專家贏得 2012 年圖靈獎
關於java.lang.NoClassDefFoundError: com/sun/mail/util/LineInputStream解決辦法
tomcat報錯:The server does not support version 3.0
XML的操作——JAXB進行Java對象和XML之間的轉換
高端對話:移動設備數據防泄漏迫在眉睫
《數據結構與抽象:Java語言描述(原書第4版)》一第1章
中國政府選擇 Ubuntu 作為國家的標準化OS
SQL查詢遞歸