【问题标题】:Button stays in pressed state after OnTouch callbackOnTouch 回调后按钮保持按下状态
【发布时间】:2019-01-14 20:51:39
【问题描述】:

我在一个按钮上定义一个CompoundDrawable 并对点击它做出反应:

    mFileSelector.setOnTouchListener(new View.OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        final int DRAWABLE_LEFT = 0;
        final int DRAWABLE_TOP = 1;
        final int DRAWABLE_RIGHT = 2;
        final int DRAWABLE_BOTTOM = 3;

        if (event.getAction() == MotionEvent.ACTION_UP) {
            if (event.getRawX() >= (mFileSelector.getRight() - mFileSelector.getCompoundDrawables()[DRAWABLE_RIGHT].getBounds().width())) {
                mFileSelector.setSelected(false);
                mFileSelector.setPressed(false);
                mFileSelector.clearFocus();
                return true;
            }
        }
        return false;
    }

如您所见,我尝试了setSelectedsetPressedclearFocus,但它们都没有任何效果。确认onTouch 后按钮保持“按下”状态(意味着我消耗了触摸事件)

【问题讨论】:

  • 我刚刚测试了你的代码。只要我抬起手指,按钮就会恢复到正常状态。您是否也覆盖 MotionEvent.ACTION_DOWN 并且不使用它?
  • @MayRestinPeace 感谢您查看此内容。这就是所有相关的代码。我猜不同版本/供应商之间的行为会像往常一样发生变化

标签: android android-button ontouchlistener compound-drawables


【解决方案1】:

你需要改变按钮的背景,这样的事情会帮助你。

 if (enabled) {
        your_button?.background = ContextCompat.getDrawable(this, R.drawable.round_button_blue)
    } else {
        your_button?.background = ContextCompat.getDrawable(this, R.drawable.round_button_gray)
    }

【讨论】:

  • 谢谢。我应该使用什么背景? (我需要默认的)
  • 默认的?创建两个可绘制样式。愿意分享更多代码吗?我可以更新我的答案
  • 我使用默认的按钮设计。我不想使用自定义可绘制对象。还有什么其他代码可以提供帮助?
猜你喜欢
  • 2014-09-04
  • 1970-01-01
  • 1970-01-01
  • 2017-12-25
  • 2018-07-27
  • 2019-10-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多