Android中OnTouch和OnClick的区别

93

OnTouchListenerOnClickListener之间有什么区别吗? 我不是从编程角度而是从用户体验角度来问的。

哪一个更好用?

我们需要同时实现两者吗?

6个回答

106
哪个更好用取决于您的需求。 onTouch 提供运动事件。因此,您可以做很多花哨的事情,因为它可以帮助您分离运动状态。只举几个例子:
  • ACTION_UP
  • ACTION_DOWN
  • ACTION_MOVE
这些是我们通常实现以获得期望结果的常见操作,例如在屏幕上拖动视图。
另一方面,onClick 除了用户交互的视图之外并没有给您太多东西。 onClick 是一个完整的事件,包括聚焦、按下和释放。所以,您对它的控制很小。好处是它非常简单易用。
不需要同时使用两者,除非您想让用户感到困扰。如果您只想要简单的点击事件,请使用 onClick。如果您想要更多功能,请使用 onTouch。两者同时使用会使过程变得复杂。
从用户的角度来看,如果您仔细实现 onTouch 以使其看起来像 onClick,那么这样做是不可察觉的。

3
如果需要一些控制,那就使用 onTouch。对于大多数情况,使用 onClick 就可以了。请参考 PH7 的回答。 - drulabs
我还在尝试弄清楚应该使用哪个。如果我有4个视图,其中3个需要点击和滑动,而第4个仅需要点击。我知道我可以仅将onTouch用于前3个视图的点击或滑动,但第4个视图呢?我是应该为一个视图实现onClick,还是只使用onTouch因为它已经被调用了..? - cjayem13
需要注意的是,为了实现某些结果可能需要使用onTouch,此时用户的观点可能会被忽略。例如,如果您想阻止软键盘显示,以便提供自己的键盘,则必须通过onTouch来实现。TIL onClick无法做到这一点。 - ChiefTwoPencils

25

“触摸”事件是指当某人将手指放在屏幕上时发生的事件。它会在手指的移动过程中被调用,包括按下、拖动和松开。而“点击”事件甚至不需要来自屏幕,它可以是某人按下回车键。

当你想要接收某人在屏幕上触摸的事件时,请使用OnTouchListener

当你想要检测点击事件时,请使用OnClickListener


我看到一些开发者在按钮上使用触摸事件,这是什么原因?虽然我还没有在手机上测试过,但是否有任何性能改进? - Nixit Patel
1
@NixitPatel 没有看到他们的源代码,我想不出任何好的理由。 - Thomas Dignan
是的,但现在我找到了答案……在你们的帮助和一些粒子方法的帮助下。不用担心,谢谢关心。 - Nixit Patel

9
  • onClickListener被用于任何视图的点击事件,比如Button、ImageButton等。

  • onTouchListener被用于实现Touch功能,比如获取触摸屏幕时的坐标。

根据官方文档,两者的定义如下:

  • onClickListner:当视图被点击时调用回调函数的接口定义。
  • onTouchListener:当触摸事件发送到此视图时,调用回调函数的接口定义。回调函数将在触摸事件传递给视图之前被调用。

1
我看到一些开发者在按钮上使用触摸事件,这是什么原因?虽然我还没有在手机上测试过,但是这种方法是否能提高性能呢? - Nixit Patel
如果我想在Android上实现用户按下游戏手柄的模拟怎么办?这是触摸而不是点击吗?但它会影响到按下的呼叫状态...(抱歉,如果有的话在Android上) @Lucifer - gumuruh

8

使用ontouch事件而不是onclick事件的一个很好的理由是在用户点击时获得更快的响应。onclick事件在响应和执行所需操作方面存在延迟。ontouch事件更适合提供高性能的移动Web应用程序。


2

OnClickListener - 用于基本的操作,当我们只需要用户点击按钮时使用,即屏幕上没有拖动或手势。

OnTouchListener 基本上比 OnClickListener 更加精细。它在屏幕上按下 / 松开操作时执行动作。它允许用户通过移动、按下触摸、松开触摸、手指拖动或任何屏幕上的运动手势来操作。


1

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接