Android :: OnTouchListener && OnClickListener组合问题

Ade*_*les 5 android release pressed ontouchlistener

问题描述:

我有TextView一个RelativeLayout和我要的颜色它的红色,当用户触摸它,另一页上走的时候,他点击它.所以我试着设置一个OnClickListener来做点击,并OnTouchListener实现触摸功能(MotionEvent.ACTION_DOWN)但是这个组合不起作用,因为OnTouchListener使得OnClickListener非功能性(不知道为什么).

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

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

sve*_*ven 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;
    }
    });
Run Code Online (Sandbox Code Playgroud)


Jay*_*ave 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;
    }
}
Run Code Online (Sandbox Code Playgroud)

如果您为布局设置触摸侦听器,这在我当前的实现中有效。

您还需要在布局上进行以下设置

android:focusable="true"
android:focusableInTouchMode="true"
android:clickable="true"
Run Code Online (Sandbox Code Playgroud)

希望能帮助到你!!!

编辑:此外,向下和向上都应该有一个标志。将其设置为 DOWN 并检查是否设置为 UP。这将避免用户可能点击屏幕中的任意位置,然后将鼠标悬停在文本视图上并释放它的错误。