gpt4 book ai didi

android - 如何让 onTouchEvent、长按和上下文菜单协同工作?

转载 作者:搜寻专家 更新时间:2023-11-01 08:14:32 26 4
gpt4 key购买 nike

在我们的应用程序中,我们有一个自定义 View (扩展 ImageView),我们在其中处理触摸事件以记录数据。我想向此 View 添加上下文菜单功能,并遵循官方 Android 文档中的指南。

onTouchEvent 代码本身运行良好。上下文菜单代码也可以正常工作。但是,如果我同时添加它们,上下文菜单代码将停止工作。我发现添加了这两段代码后,永远不会调用 onCreateContextMenu,因此永远不会显示上下文菜单。

根据我对Android文档的解释,onTouchEvent返回false表示事件没有被消费,所以应该用于进一步的处理。由于某种原因,这里没有发生这种情况。如果有人能告诉我我缺少什么,我将不胜感激。顺便说一句,目标是运行 2.3.4 ROM 的 Nexus One。

这是自定义 View 中 onTouchEvent 的代码:

public boolean onTouchEvent(MotionEvent event) 
{
switch (event.getAction())
{
case MotionEvent.ACTION_DOWN:
// Add event coordinates to an arraylist
break;
}

return false;
}

提前感谢您的帮助。

最佳答案

详细说明 hackbod 答案,您可能应该将 return super.onTouchEvent(event); 作为最后一个方法语句。

我想如果您不处理该事件,并且如果您不调用默认的 View 行为,那么没有人会做任何事情,也不会发生任何事情。

返回值的点可能是例如调用某些祖先的默认行为,并让派生类知道祖先是否处理了事件。

在对 Android Developers 进行一些搜索后,引用主题覆盖 View 的现有回调方法 here它说:

This allows you to define the default behavior for each event inside your custom View and determine whether the event should be passed on to some other child View.

因此,返回值背后的主要思想是让 Android 知道事件是否应该传递给 subview 。

HTH

编辑:

关于您在评论中提到的“方向”,一般来说(即不仅在 Android 上)UI 事件处理过程是这样的:

在某个时刻,您派生的自定义控件会收到该事件。在您的事件 Hook 实现中,是否涉及您祖先的行为取决于您。这就是关于类继承方向的全部内容。

然后,还有另一个方向,与UI 控件层次结构 相关的方向。您的自定义控件可能包含在一个较大的控件容器中,并且您的控件也可能包含其他内部控件(文本框、按钮等)。关于这个方向,如果你声明不处理事件(返回false)那么UI事件处理机制会将桶传递给containing(?)控件(想想你的背景上的那个) .

关于android - 如何让 onTouchEvent、长按和上下文菜单协同工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6179060/

26 4 0