Android::OnTouchListener&&;onclick侦听器组合问题
问题描述: 我在Android::OnTouchListener&&;onclick侦听器组合问题,android,release,ontouchlistener,pressed,Android,Release,Ontouchlistener,Pressed,问题描述: 我在RelativeLayout上有一个TextView,当用户触摸它时,我想把它涂成红色,当用户点击它时,我想进入另一个页面。 因此,我尝试设置一个OnClickListener来执行单击,并设置一个OnClickListener来实现触摸功能(MotionEvent.ACTION\u DOWN),但这种组合不起作用,因为OnClickListener使OnClickListener不起作用(不知道为什么) 在论坛上,人们说我们可以通过OnTouchMotionEvent.ACTI
RelativeLayout
上有一个TextView
,当用户触摸它时,我想把它涂成红色,当用户点击它时,我想进入另一个页面。
因此,我尝试设置一个OnClickListener
来执行单击,并设置一个OnClickListener
来实现触摸功能(MotionEvent.ACTION\u DOWN
),但这种组合不起作用,因为OnClickListener
使OnClickListener
不起作用(不知道为什么)
在论坛上,人们说我们可以通过OnTouchMotionEvent.ACTION\u UP
来实现OnClick
,但是这一个可以从我的TextView
布局中触发(如果你按下TextView并将手指从他身上拖出来释放它,它就会被点击),这不是我想要的行为,因为我想要:单击文本视图上的=按下+释放
有人能给我一个解决办法吗?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"
希望对你有帮助
编辑:此外,向下和向上都应该有一个标志。将其设置为向下,并检查其是否设置为向上。这将避免出现这样的错误:用户可能点击屏幕上的任何位置,然后将鼠标悬停在textview上并将其释放。当操作启动时,您可以调用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;
}
});
我也有同样的问题。通过从ACTION\u MOVE返回false解决了此问题。我已经和它斗争了几个小时,尝试了各种各样的事情,但似乎我一直忽视了这个小问题。。。现在它有了意义。当您从onTouch返回true时,进一步的处理将停止,因此OnClickListener不会意识到任何移动,甚至在指针移动到视图之外之后也会触发onClick。我也遇到同样的问题…v.performClick工作得很好…这是解决方案…请接受回答谢谢sven。这太棒了。嗯。。。。如果“TouchListener”位于按钮上方的视图上,如果my
TouchListener
确定该事件不是刷卡,则该按钮应获得点击,该怎么办?关于如何将其传递给下面的任何视图,有什么想法吗?非常感谢!你肯定帮了我。我的诀窍是设置你所说的三个属性…谢谢你的帮助!我代表@bugs99在我的文本视图中丢失了android:focusable=“true”,因为@bugs99缺乏声誉而无法添加评论:通过将返回true
更改为返回false
,您可以执行onTouchListener()
操作,然后将触摸事件传递给onClickListener()
。这样,就不需要显式执行performClick()