我似乎有一个问题,抓住我的评级栏点击.评分栏显示正常,并具有默认值.唯一的问题是我无法更改任何值,或者没有启用.我尝试了许多不同的东西(例如,在布局中启用,完全用
java构建).他们似乎都没有影响.这是我最新的评分栏.我必须做一些stooopid不能捕获的点击.
ratingBar showratingBar = (ratingBar) findViewById(R.id.showratingBar); showratingBar.setEnabled(true); showratingBar.setClickable(true); showratingBar.setrating(0); showratingBar.setonratingBarchangelistener(new ratingBar.OnratingBarchangelistener(){ @Override public void onratingChanged(ratingBar ratingBar,float rating,boolean fromUser) { System.out.println("showrating.buildratingBar: " +rating); ratingBar.setrating(rating); }}); showratingBar.refreshDrawableState();
布局:
<LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" > <TextView android:id="@+id/showQualityLabel" android:layout_width="100dp" android:layout_height="wrap_content" android:text="@string/show_rating_label" android:textAppearance="?android:attr/textAppearanceMedium" android:textColor="#E6E6E6" android:textSize="12sp" /> <ratingBar android:id="@+id/showratingBar" style="?android:attr/ratingBarStyleSmall" android:layout_width="wrap_content" android:layout_height="wrap_content" android:max="5" android:numStars="5" android:rating="0" android:stepSize="1"/> </LinearLayout>
先谢谢你.
克雷格
解决方法
setonClickListener()不起作用是ratingBar覆盖onTouchEvent(),从不让View处理它,所以View#performClick()从未被调用(这将调用OnClickListener).
来自ratingBar并覆盖onTouchEvent()
ratingBar.setonTouchListener(new OnTouchListener() { @Override public boolean onTouch(View v,MotionEvent event) { if (event.getAction() == MotionEvent.ACTION_UP) { float touchPositionX = event.getX(); float width = ratingBar.getWidth(); float starsf = (touchPositionX / width) * 5.0f; int stars = (int)starsf + 1; ratingBar.setrating(stars); Toast.makeText(MainActivity.this,String.valueOf("test"),Toast.LENGTH_SHORT).show(); v.setpressed(false); } if (event.getAction() == MotionEvent.ACTION_DOWN) { v.setpressed(true); } if (event.getAction() == MotionEvent.ACTION_CANCEL) { v.setpressed(false); } return true; }});