首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Android 星級評價控件 RatingBar 完整使用指南:從 UI 到接口傳值

     編輯:程式設計綜合問答

核心組件:RatingBar

Android 原生提供 android.widget.RatingBar,支持星級顯示、觸摸交互、步長控制,完美適配評價場景。

XML 佈局 (activity_main.xml)


<RatingBar
    android:id="@+id/ratingbar"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:numStars="5"        <!-- 總星數 -->
    android:rating="0"          <!-- 默認評分 -->
    android:stepSize="1"        <!-- 步長:1=整星,0.5=半星 -->
    android:isIndicator="false" <!-- true=僅顯示,false=可交互 -->
    style="@style/Widget.AppCompat.RatingBar" /> <!-- 兼容主題 -->

Activity 邏輯 (MainActivity.java)


public class MainActivity extends AppCompatActivity {
    private RatingBar mRatingBar;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mRatingBar = findViewById(R.id.ratingbar);

        // 監聽評分變化
        mRatingBar.setOnRatingBarChangeListener(new RatingBar.OnRatingBarChangeListener() {
            @Override
            public void onRatingChanged(RatingBar ratingBar, float rating, boolean fromUser) {
                // rating 為浮點數 (如 3.5, 4.0)
                // fromUser 區分用戶觸摸 vs 代碼設置
                Toast.makeText(MainActivity.this, "評價了 " + rating + " 星", Toast.LENGTH_SHORT).show();

                // 【關鍵】接口傳值:轉換為整數/定點數
                int score = Math.round(rating); // 四捨五入取整
                // 或保留一位小數: int score10 = (int)(rating * 10); // 3.5 -> 35
                submitScoreToServer(score);
            }
        });
    }

    private void submitScoreToServer(int score) {
        // Retrofit/OkHttp/Volley 異步請求
        // API: POST /api/rate { "target_id": 123, "score": score }
    }
}

進階定制

  • 自定義星星圖標: android:progressDrawable="@drawable/custom_rating_stars" (Layer-list 定義背景/次級/進度三層圖片)。
  • 半星/任意精度: stepSize="0.5" 或 0.1,配合 numStars="10" 實現 0.1 精度。
  • 只讀展示模式: android:isIndicator="true" + 代碼 setRating(3.5f)。
  • 樣式主題化: 在 styles.xml 定義 CustomRatingBar 統一全局風格 (顏色、大小、間距)。

接口傳值規範建議

後端存儲類型前端傳值策略說明
TINYINT (1-5)Math.round(rating)整星制,四捨五入
DECIMAL(2,1) (0.0-5.0)rating (float)保留一位小數,直接傳浮點數
INT (0-500)(int)(rating * 100)避免浮點數精度問題,擴大 100 倍存整數

常見問題排查

  • ❌ 星星不顯示/顯示異常 → 檢查主題是否繼承 Theme.AppCompat,style 屬性是否正確。
  • ❌ 點擊無反應 → 確認 isIndicator="false",父佈局無 android:clickable="true" 攔截事件。
  • ❌ 多次觸發回調 → fromUser 參數區分用戶操作與 setRating() 代碼觸發。

RatingBar 是 Android 表單評分的標準組件,**XML 聲明 + 監聽器 + 數據轉換 + 異步提交** 四步走,即可完成從 UI 到接口的閉環。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved