OnRatingBarChangeListener中的Android Nougat(7.0/API 24)评级计数错误

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

我在Android Nougat(7.0)中使用
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,我所做的就是用星图改变评级栏的布局,然后单击相同的按钮,以某种方式管理视图。