打开上下文菜单而无需注册视图

3

如何在不使用registerForContextMenu()注册视图的情况下打开上下文菜单?

我的活动覆盖了onTouchEvent以检测手势,如果我使用registerForContextMenu(),它会停止工作。我正在检测长按事件,因此我想将该请求转发到一个方法,该方法将为我构建菜单,但不知道是否可以这样工作。


你好。你找到解决方案了吗?我也遇到了类似的问题。 - Catalin Morosan
2个回答

1

我的onTouchEvent有以下几行代码。它们不太美观,但是它们能够正常工作。

private void onLongPressed(View view) {
    registerForContextMenu(view);
    view.getParent().showContextMenuForChild(view);
    unregisterForContextMenu(view);
}

如果我在一个onTouchListener中检测到长按操作,就会调用onLongPressed函数。

1

我相信你可以使用View.setOnCreateContextMenuListener在布局初始化时手动绑定你的活动作为视图的上下文菜单提供者,然后在检测到长按时调用View.showContextMenu来呈现菜单。它应该像正常注册一样调用你的onCreateContextMenu

编辑:好吧,这与覆盖视图的触摸事件监听器具有相同的效果。鉴于此,我唯一能想到的解决方案是创建一个隐藏的视图并注册为视图的上下文菜单提供者,然后在看到真实/可见视图上的长按时要求它显示上下文菜单。


尝试过了,它给我与“registerForContextMenu()”相同的结果,即它会破坏运动检测。因此,事件必须在比我想要的更高的链中被消耗掉。 - JRL
哎呀,太糟糕了。可怕的hackery选项已添加到答案中。 - Walter Mundt

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