5

问题描述:

我有一个TextViewRelativeLayout我想在用户触摸它时将它涂成红色,并在他点击它时转到另一个页面。所以我尝试设置一个OnClickListener来进行点击,并设置一个OnTouchListener来实现触摸功能(MotionEvent.ACTION_DOWN)但是这种组合不起作用,因为OnTouchListenerOnClickListener不起作用(不知道为什么)。

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

有人可以给我一个解决方案吗?

4

3 回答 3

21

你可以在 action_up 时调用 View.performClick()。希望能帮助到你。

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;
    }
    });
于 2012-03-10T08:12:54.140 回答
3

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

如果您有多个可点击布局,则第一个没有任何点击事件,则会出现此问题。那是因为它首先被选中,然后你得到点击事件,试试下面的代码。

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。这将避免用户可能点击屏幕中的任何位置然后将鼠标悬停在您的文本视图上并释放它的错误。

于 2011-10-10T19:32:39.730 回答
2

有同样的问题。通过从 ACTION_MOVE 返回 false 来解决它。我已经与它斗争了几个小时,尝试了各种事情,但似乎我一直忽略了这个小问题......现在它是有道理的。当您从 onTouch 返回 true 时,将停止进一步的处理,因此 OnClickListener 不会意识到任何移动并触发 onClick,即使在指针移出视图后也是如此。

于 2012-04-29T23:21:59.847 回答