RatingBar 添加 style="?android:attr/ratingBarStyleSmall" 後,點擊星星無反應、評分不變。移除 style 則正常。
系統內置樣式 ratingBarStyleSmall 可能包含 android:isIndicator="true" 或覆蓋了觸摸反饋屬性。isIndicator="true" 將 RatingBar 設置為「僅顯示指示器」模式,禁用用戶交互。
android.R.attr.ratingBarStyleSmall 定義在 themes.xml,父樣式鏈可能包含 Widget.RatingBar.Small;android:isIndicator="false" 覆蓋樣式:<RatingBar
android:id="@+id/ratingBar1"
style="?android:attr/ratingBarStyleSmall"
android:isIndicator="false" <!-- 強制啟用交互 -->
android:numStars="5"
android:stepSize="0.5"
android:rating="3" />
onInterceptTouchEvent) 或 android:clickable="false";<style name="MyRatingBarSmall" parent="Widget.AppCompat.RatingBar.Small">
<item name="android:isIndicator">false</item>
<item name="android:clickable">true</item>
<item name="android:focusable">true</item>
</style>
監聽器代碼正確:
ratingBar.setOnRatingBarChangeListener(new RatingBar.OnRatingBarChangeListener() {
@Override
public void onRatingChanged(RatingBar bar, float rating, boolean fromUser) {
if (fromUser) { // 僅用戶操作觸發
textView.setText("您選擇了 " + rating + " 顆星");
}
}
});
樣式繼承可能攜帶禁用交互的屬性 (如 isIndicator=true)。解決方法:在布局中顯式設置 android:isIndicator="false" 覆蓋樣式,或自定義樣式明確聲明交互屬性。調試時善用 Layout Inspector 查看屬性最終解析值。