Android :: OnTouchListener && OnClickListener 组合问题



问题描述:

我在RelativeLayout上有一个TextView,当用户触摸它时,我想把它涂成红色,当他点击它时,我想转到另一个页面。所以我试图设置一个OnClickListener来做点击,和一个OnTouchListener来实现触摸功能(MotionEvent.ACTION_DOWN),但这种组合不起作用,因为OnTouchListener使OnClickListener无功能(不知道为什么)。

在论坛上人们说我们可以通过OnTouch MotionEvent.ACTION_UP来实现OnClick,但是这个可以从我的TextView布局中触发(如果你按下它并将手指从他身上拖出以释放,则会点击TextView),这不是期望的行为,因为我想:
点击=按+释放TextView

谁能给我一个解决这个问题的方法?

你可以调用View.performClick()当action_up。希望能有所帮助。

your_txtView.setOnClickListener(new TextView.OnClickListener(){
        public void onClick(View v) {
            // TODO Auto-generated method stub
        }
    });
    your_txtView.setOnTouchListener(new TextView.OnTouchListener(){
            @Override
    public boolean onTouch(View v, MotionEvent event) {
        if (MotionEvent.ACTION_DOWN == event.getAction()) {
        } else if (MotionEvent.ACTION_UP == event.getAction()) {
            v.performClick();
        }
        return true;
    }
    });

Adel,是第一次点击的问题,还是你根本没有点击?

有这个问题,如果你有多个可点击的布局,你不会得到任何点击事件的第一次。这是因为它使它首先被选中,然后你得到click事件,试试下面的代码。

private class CustomTouchListener implements OnTouchListener {
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        TextView tv = (TextView) v.findViewById(R.id.single_line_text);
        if (event.getAction() == MotionEvent.ACTION_DOWN) {
            tv.setTextColor(COLOR_WHEN_PRESSED);
        } else if (event.getAction() == MotionEvent.ACTION_UP) {
            tv.setTextColor(COLOR_WHEN_RELEASED);
            // Action of click goes here
        } else if (event.getAction() == MotionEvent.ACTION_CANCEL) {
            tv.setTextColor(COLOR_WHEN_RELEASED);
                            // To handle release outside the layout region
        }
        return false;
    }
}

这是工作在我目前的实现,如果你设置触摸监听器为您的布局。

你还需要在你的布局中设置

android:focusable="true"
android:focusableInTouchMode="true"
android:clickable="true"

希望有帮助!!

编辑:另外,在DOWN和UP中都应该有一个标志。设置为DOWN,检查是否设置为UP。这将避免一个bug,即用户可能点击屏幕上的任何地方,然后将鼠标悬停在textview上并释放它。

有同样的问题。通过从ACTION_MOVE返回false来解决。我已经和它斗争了几个小时,尝试了各种各样的方法,但似乎我一直忽视这个小问题……现在就说得通了。当你从onTouch返回true时,进一步的处理被停止,因此OnClickListener不知道任何移动并触发onClick,即使指针已经移动到视图之外。

相关内容

  • 没有找到相关文章

最新更新