首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >捕获RatingBar单击

捕获RatingBar单击
EN

Stack Overflow用户
提问于 2012-11-24 04:56:27
回答 1查看 9.5K关注 0票数 10

我似乎在捕捉我的评价栏点击时遇到了问题。评级栏显示得很好,并且具有默认值。唯一的问题是我不能更改任何值,或者它没有被启用。我尝试了许多不同的方法(例如在布局中启用,完全在java中构建)。它们似乎都没有产生影响。这是我的收视率栏的最新版本。我一定是做了什么傻事才不能捕捉到点击。

Java代码:

代码语言:javascript
复制
  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();

布局:

代码语言:javascript
复制
         <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>

提前谢谢你。

克雷格

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-11-24 05:12:33

setOnClickListener()不起作用的原因是RatingBar覆盖了onTouchEvent()并且从不让视图处理它,因此View#performClick()永远不会被调用(它将调用OnClickListener)。

从RatingBar派生并重写onTouchEvent()

代码语言:javascript
复制
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;
            }});
票数 34
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13535640

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档