星級評分條(RatingBar)的功能與用法

  • 2019 年 11 月 8 日
  • 筆記

星級評分條與拖動條有相同的父類:AbsSeekBar,因此它們十分相似。實際上星際評分條與拖動條的用法、功能都十分接近:它們都允許用戶通過拖動來改變進度。RatingBar與SeekBar的最大區別在於:RatingBar通過星星來表示進度。

RatingBar支援的常用XML屬性

XML屬性

說明

android:isIndicator

設置該星級評分條是否允許用戶改變(true為不允許修改)

android:numStars

設置該星機評分條總共有多少個星級

android:rating

設置該星級評分條默認的星級

android:stepSize

設置每次最少需要改變多少個星級

為了讓程式能響應星級評分條評分的改變,可以考慮為它綁定一個OnRatingBarChangeListener監聽器。

下面通過實例來示範RatingBar的功能與用法。

實例:通過星級改變圖片的透明度

介面布局文件如下

<?xml version="1.0" encoding="utf-8"?>  <LinearLayout      xmlns:android="http://schemas.android.com/apk/res/android"      android:orientation="vertical"      android:layout_width="match_parent"      android:layout_height="match_parent">      <ImageView          android:id="@+id/image"          android:layout_width="match_parent"          android:layout_height="240dp"          android:src="@drawable/lijiang"/>      <!--定義一個拖動條,並改變它的滑塊外觀-->      <RatingBar          android:id="@+id/rating"          android:layout_width="wrap_content"          android:layout_height="wrap_content"          android:numStars="5"          android:max="255"          android:progress="255"          android:stepSize="0.5"/>  </LinearLayout>

上面的布局文件中指定了該星際評分條的最大值為255,當前進度為255。其中兩個屬性都來自ProgressBar組件,這沒有任何問題,因為RatingBar本來就是一個特殊的ProgressBar。

主程式只用為RatingBar綁定事件監聽器,即可監聽星級評分條的星級改變。主程式如下

public class MainActivity extends AppCompatActivity {        @Override      protected void onCreate(Bundle savedInstanceState) {          super.onCreate(savedInstanceState);          setContentView(R.layout.activity_main);          final ImageView image = findViewById(R.id.image);          RatingBar ratingBar = findViewById(R.id.rating);          ratingBar.setOnRatingBarChangeListener((bar, rating, fromUser)->{              //當星級評分條的評分發生改變時觸發該方法              //動態改變圖片的透明度,其中255是星級評分條的最大值              //5顆星星就代表最大值255              image.setImageAlpha((int)(rating * 255 / 5));          });      }  }

上面定義了RatingBar時指定了android:stepSize=”0.5″,由此改星級評分條中星級的最小改變值為0.5,最少半個星級。

運行程式截圖如下