我RatingBar在Android Nougat(7.0)中使用并OnRatingBarChangeListener用于检测评级变化.
它在回调方法中给出了错误的评级值.所以假设如果我点击第二颗星它给我3.0,如果我点击第四颗星它给我数为5.0.
我注意到的另一件事是数量取决于我点击的确切位置.如果我点击星的前半部分它返回正确的计数,如果我点击星的后半部分,它会增加+1来计数.
活动:
RatingBar ratingBar = (RatingBar) findViewById(R.id.ratingBar2);
ratingBar.setOnRatingBarChangeListener(new RatingBar.OnRatingBarChangeListener() {
@Override public void onRatingChanged(RatingBar ratingBar, float rating, boolean fromUser) {
Log.i(TAG, String.format("Rating is %f : fromUser %b", rating, fromUser));
mTextView.setText(String.format("Rating is %f ", rating));
}
});
Run Code Online (Sandbox Code Playgroud)
XML:
<RatingBar
android:id="@+id/ratingBar2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:isIndicator="false"
android:stepSize="1"
android:rating="5"
/>
Run Code Online (Sandbox Code Playgroud)
您可以通过以下操作有效地向后移植修复:
if (Build.VERSION.SDK_INT == Build.VERSION_CODES.N) {
try {
Field field =
AbsSeekBar.class.getDeclaredField("mTouchProgressOffset");
field.setAccessible(true);
field.set(mRatingBar, 0.6f);
} catch (NoSuchFieldException | IllegalAccessException e) {
e.printStackTrace();
}
}
Run Code Online (Sandbox Code Playgroud)
查看修复它的原始提交.
| 归档时间: |
|
| 查看次数: |
1005 次 |
| 最近记录: |