Android 7.0中RatingBar评星点击区域不准确的解决

RatingBar设置max=5,StepSize=1,想输入1-5星的整数评价。在Android 7.0的一些手机中(例如华为P9),会出现评星点击区域不准确的问题。

如图,用户在点击第一个五角星正中间区域的时候,如果在红框区域,就会变成二星而不是一星;而用户想选择1星,则必须点击红框左侧区域,体验太差。

解决方法:

1、把StepSize改成比较小的值,例如0.1或0.5

1
2
3
4
5
6
<RatingBar
android:id="@+id/rating"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:max="5"
android:stepSize="0.1"/>

2、代码中进行取整控制

1
2
3
4
5
6
7
8
9
10
mRating.setOnRatingBarChangeListener(new RatingBar.OnRatingBarChangeListener() {
@Override
public void onRatingChanged(RatingBar ratingBar, float rating, boolean fromUser) {
if (fromUser) { // 用户点击才会响应,否则会死循环
int r = (int) (rating + 0.5f); // 四舍五入
ratingBar.setRating(r);
Toast.makeText(RatingBarActivity.this, rating + ", " + r + "", Toast.LENGTH_SHORT).show();
}
}
});