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

Nil*_*kar 9 android ratingbar

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)

Kev*_*cke 9

您可以通过以下操作有效地向后移植修复:

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)

查看修复它的原始提交.