OnRatingBarChangeListener中的Android Nougat(7.0/API 24)评级计数错误
我在Android Nougat(7.0)中使用OnRatingBarChangeListener中的Android Nougat(7.0/API 24)评级计数错误,android,ratingbar,Android,Ratingbar,我在Android Nougat(7.0)中使用RatingBar,并使用OnRatingBarChangeListener检测评级变化 它在回调方法中给出了错误的评级值。所以假设我点击第二颗星,它给我3.0,如果我点击第四颗星,它给我5.0 我注意到的另一件事是计数取决于我点击的确切位置。若我点击星号的前半部分,它会返回正确的计数,若我点击星号的后半部分,它会加上+1 活动: RatingBar ratingBar = (RatingBar) findViewById(R.id.rating
RatingBar
,并使用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));
}
});
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"
/>
这是API 24中的一个错误:
似乎唯一的修复方法是升级(如果您的制造商/运营商曾经向您发布过升级)或使用某种API 24的自定义分级栏实现。您可以通过执行以下操作有效地将修复方法后传:
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();
}
}
请参阅解决此问题的方法。我为这个问题编写了一个非常简单的解决方法,在您的评级栏上,使用步骤as
“0.1”
,并在您的OnRatingBarChangeListener
上使用此代码片段
int rating = (int)Math.Ceiling(args.Rating);
if (rating != args.Rating)
{
ratingBar.Rating = rating;
return;
}
// now the rating will be the tapped star
// you can do what you must do here
p、 我在Xamarin.Android中写了这篇文章,但我非常确信,通过更改ceil函数并使用setter对评级栏进行评级,您可以轻松地将其应用到java中我也遇到了同样的问题;但它只出现在API 24中。这在API 25中是固定的。在API级别24中使用分级条有什么修复方法吗?我还没有任何关于API级别24的解决方案。如果API级别为24,我所做的就是用星图改变评级栏的布局,然后单击相同的按钮,以某种方式管理视图。