一、什麼是Android RatingBar?
Android RatingBar是Android提供的一個控件,用於讓用戶評價某個內容的好壞,可以通過手勢操作或者代碼設置來改變星星的數量,用於提高應用用戶體驗。
它包含若干個星星圖標,初始狀態下可以選擇星星個數,也可以點擊星星來改變評分,評分數值會在UI上動態呈現。
RatingBar主要包含3個屬性:
- android:numStars:表示星星的總數,必須為正整數,默認為5
- android:rating:表示初始化的評分值,必須在0到numStars之間,默認為0
- android:stepSize:表示評分改變的增量,必須為正數,默認為1
<RatingBar
android:id="@+id/ratingBar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:numStars="5"
android:rating="3.5"
android:stepSize="0.5" />
二、如何使用Android RatingBar?
1. 在xml中直接添加RatingBar控件
可以通過直接在布局文件中添加RatingBar控件,並設置相應的屬性來使用它:
<RatingBar
android:id="@+id/ratingBar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:numStars="5"
android:rating="3.5"
android:stepSize="0.5" />
2. 在Java代碼中動態添加RatingBar控件
也可以在Java代碼中動態添加RatingBar控件,並設置相應的屬性,然後添加到布局中。
RatingBar ratingBar = new RatingBar(this);
ratingBar.setId(R.id.ratingBar);
ratingBar.setNumStars(5);
ratingBar.setRating(3.5f);
ratingBar.setStepSize(0.5f);
LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.WRAP_CONTENT,
LinearLayout.LayoutParams.WRAP_CONTENT);
layoutParams.setMargins(0, 20, 0, 0);
ratingBar.setLayoutParams(layoutParams);
LinearLayout linearLayout = findViewById(R.id.linearLayout);
linearLayout.addView(ratingBar);
三、如何監聽RatingBar的變化?
可以通過設置RatingBar的OnRatingBarChangeListener來監聽RatingBar的變化,當用戶通過手勢或代碼改變了評分時,會自動回調OnRatingBarChangeListener接口的onRatingChanged方法,傳入當前RatingBar控件、用戶選擇的評分數值以及是否由用戶手勢觸發的標記。
RatingBar ratingBar = findViewById(R.id.ratingBar);
ratingBar.setOnRatingBarChangeListener(new RatingBar.OnRatingBarChangeListener() {
@Override
public void onRatingChanged(RatingBar ratingBar, float rating, boolean fromUser) {
// TODO: 處理評分變化
}
});
四、如何自定義RatingBar的樣式?
可以通過自定義RatingBar的樣式,來滿足不同應用場景的需求。
1. 修改星星大小和間距
通過修改RatingBar的android:progressDrawable屬性來更改星星的大小和間距。
<RatingBar
android:id="@+id/ratingBar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:numStars="5"
android:rating="3.5"
android:stepSize="0.5"
android:progressDrawable="@drawable/custom_ratingbar" />
其中custom_ratingbar.xml的代碼示例如下:
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@android:id/background" android:drawable="@drawable/ic_star_border" />
<item android:id="@android:id/secondaryProgress" android:drawable="@drawable/ic_star" />
<item android:id="@android:id/progress">
<clip>
<shape android:shape="rectangle">
<solid android:color="@color/colorPrimaryDark" />
</shape>
</clip>
</item>
</layer-list>
其中,ic_star_border和ic_star分別為未選中和選中的星星圖片,可以自己根據需求來替換。在progressDrawable中,background表示未選中的星星,secondaryProgress表示選中但未被填滿的星星,progress表示選中且被填滿的星星。可以通過修改secondaryProgressDrawable和progressDrawable來調整選中星星和未選中星星的大小和間距。
2. 修改星星樣式
RatinngBar默認的星星是一個五角星,如果需要更換別的樣式,可以通過setProgressDrawable方法來實現。具體通過代碼來設置,首先需要準備一張圖片,然後通過以下代碼來實現:
RatingBar ratingBar = findViewById(R.id.ratingBar);
Drawable drawable = getResources().getDrawable(R.drawable.ic_heart);
drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());
ratingBar.setProgressDrawable(drawable);
五、總結
本文介紹了Android RatingBar控件的定義、使用、監聽變化以及自定義樣式等內容,並提供了完整的示例代碼。藉助RatingBar,開發者可以方便地增加應用的用戶體驗,提高應用的質量。
原創文章,作者:BXLF,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/145050.html