我有一个启动上下文菜单的TextView:
textView.setOnCreateContextMenuListener(new OnCreateContextMenuListener() {
@Override
public void onCreateContextMenu(ContextMenu contextMenu,
View view,
ContextMenu.ContextMenuInfo contextMenuInfo) {
// Do stuff...
}
});
此textview还在其XML中设置了android:autoLink="all"
属性。
现在,如果我将TextView的内容设置为URL并长按URL,则首先显示上下文菜单,但是当我抬起手指时,按下链接并打开浏览器。
有没有办法让上下文菜单或长按消耗触摸事件,以便不点击链接?我已考虑覆盖onTouch()
以使TextView处理ACTION_UP事件,但我无法可靠地跟踪上下文菜单何时可见以阻止触摸事件。
答案 0 :(得分:2)
这对我来说似乎有些笨拙,但这是我能够在没有直接处理View的触摸事件(这可能是正确的方法)的情况下完成这项工作的唯一方法。
如果上下文菜单打开,我们基本上会更改TextView的LinkMovementMethod
,因此 up 操作不会触发链接。当上下文菜单关闭时,我们会恢复LinkMovementMethod
,以便正常点击链接按预期工作。
按如下方式调整onCreateContextMenu()
方法:
textView.setOnCreateContextMenuListener(new OnCreateContextMenuListener() {
@Override
public void onCreateContextMenu(ContextMenu menu,
View view,
ContextMenu.ContextMenuInfo info) {
textView.setMovementMethod(ArrowKeyMovementMethod.getInstance());
// Do stuff
}
});
然后像这样覆盖活动的onContextMenuClosed()
:
@Override
public void onContextMenuClosed(Menu menu)
{
textView.setMovementMethod(LinkMovementMethod.getInstance());
}
当然,这假定textView
是您的活动的类成员。
答案 1 :(得分:0)
就像迈克先生说的那样。
您可以改用setOnCreateContextMenuListener。并在此方法中执行单击父视图
示例:
这是视图组内的文本视图;
textview.setOnCreateContextMenuListener(
(menu, v, menuInfo) -> viewgroup.performLongClick());
答案 2 :(得分:0)
此解决方案似乎没有任何缺点:
<amp-analytics type="gtag" data-credentials="include">
<script type="application/json">
{
"vars": {
"gtag_id": "UA-48872168-2",
"config": {
"UA-48872168-2": { "groups": "default" }
}
},
"triggers": {
"form": {
"selector": "#contact-form",
"on": "submit-sucess",
"vars": {
"event_name": "CATEGORIA",
"method": "AZIONE"
}
}
}
}
</script>
</amp-analytics>
长按将显示预期的上下文菜单,但是抬起手指不会发生任何事情(因为点击已被取消)。不会在上下文菜单中产生 not 的快捷键将照常处理。