OnTouch和OnClick Android之间的区别


90

有什么区别OnTouchListenerOnClickListener?我不是从编程的角度出发,而是从用户体验的角度出发。

哪个更好用?

我们需要同时实现吗?

Answers:


100

哪个更好用?

这确实取决于您的要求。

onTouch给您运动事件。因此,您可以做很多花哨的事情,因为它可以帮助您分隔运动状态。仅举几个:

  • ACTION_UP
  • ACTION_DOWN
  • ACTION_MOVE

这些是我们通常为了获得期望结果而执行的常见操作,例如在屏幕上拖动视图。

另一方面,onClick除了哪个视图用户进行交互之外,它没有给您太多的好处。onClick是一个完整的事件,包括聚焦,按压和释放。因此,您对此几乎没有控制权。一方面是实现非常简单。

我们需要同时实现吗?

除非您想弄乱用户,否则没有必要。如果您只想要简单的点击事件,请前往onClick。如果您想要的不仅仅是单击,请继续onTouch。两者都将使过程复杂化。

从用户的角度来看,如果您onTouch仔细实现就像,这是不明显的onClick


3
如果需要一些控制,请使用onTouch。在大多数情况下,onClick都可以。请参阅PH7的答案。
drulabs 2012年

我仍在尝试找出使用哪个。如果我有4个视图,则其中3个需要单击和滑动,而第4个仅单击即可。我知道我只能将onTouch用作前3个视图的单击或滑动,但是第4个视图呢?我应该为一个视图实现onClick还是只使用onTouch,因为它已经被调用了。
cjayem13 2014年

应该注意的是,可能有必要使用onTouch来获得某些结果,在这种情况下,用户的观点将受到谴责。FE,如果您想阻止软键盘显示,那么您可以提供自己的软键盘,它必须通过onTouch。TIL onClick不会这样做。
ChiefTwoPencils 2014年

24

“触摸”事件是指有人将手指放在屏幕上。它在手指的整个移动,下移,拖动和上移过程中被调用。屏幕上甚至不需要“单击”。可能是有人按下Enter键。

OnTouchListener当您想从屏幕上某人的手指接收事件时使用。

使用OnClickListener时要检测的点击。


我已经看到一些开发人员为按钮使用touch事件,这是什么原因?我尚未在电话上进行测试,但是是否有任何即兴演奏?
Nixit Patel '02

1
@NixitPatel在没有看到其来源的情况下,没有充分的理由想到我的脑海。
Thomas Dignan 2012年

是的,但是现在我找到了答案……在你们的帮助下和一些粒子方法。无需担心,感谢您的询问
Nixit Patel 2012年

9
  • onClickListener 每当引发任何视图的单击事件时都使用,例如:Button,ImageButton的click事件。

  • onTouchListener 每当您要实现触摸功能时就使用,例如,如果您想获取精确触摸屏幕的坐标。

根据官方文档,两者的定义分别是:

  • onClickListner:单击视图时要调用的回调的接口定义。
  • onTouchListener:将触摸事件调度到此视图时要调用的回调的接口定义。在将touch事件提供给视图之前,将调用回调。

1
我已经看到一些开发人员为按钮使用touch事件,这是什么原因?我尚未在电话上进行测试,但是是否有任何即兴演奏?
Nixit Patel '02

8

在onclick事件上使用ontouch事件的一个好理由是,在用户单击时获得更快的响应。如果onclick事件在响应和继续执行所需的操作时遇到延迟。ontouch事件更适合交付高性能的移动Web应用程序。


2

OnClickListener -用于基本目的,当我们只需要用户单击时,即单击按钮,在屏幕上没有拖动或手势时

OnTouchListener从本质上讲,它是比OnClickListener更好的控件。它在屏幕上的按下/释放上执行操作并动作。它允许用户在屏幕上组合移动,向下触摸,向上触摸,手指拖动或任何移动手势


1

最好使用onTouch。给你一个例子:当你有一个ViewPager和一个TextView时。如果您在textView上实现setOnClickListener,则在您触摸/滑动TextView时将无法滑动ViewPager

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.