我有一个EditText,当我执行长按时,会选择按下的单词,还会发生另外两件事。
首先,应用程序顶部会显示一个上下文操作栏,其中包含复制,剪切,粘贴,替换,全部选择的图标。
其次,在单词周围出现另一个上下文菜单,如选项气泡,其中包含“粘贴”和“替换”之类的内容。我不确定这些气泡是否特定于设备(例如Samsung / Nexus7)。
这些气泡与动作栏的功能完全相同,并且在打开软键板的同时真的让屏幕变得杂乱....有什么方法可以禁用气泡,同时将动作栏保持在顶部?
我注意到performLongClick中的“super”函数是这两个调用的父函数。如果阻止它,则不会发生。但是我还没有找到任何覆盖,让我选择一个而不是另一个。
编辑:如果您执行双击,也会出现两个上下文菜单。
public class MyExtendedEditText extends EditText {
....
@Override
public boolean performLongClick() {
//Super function selects word (otherwise a=b), and calls action bar,
//and text selection bubbles
boolean retval =super.performLongClick();
int a = getSelectionStart();
int b = getSelectionEnd();
Log.i("System.out", "long click " + a + " " + b);
return retval;
}
答案 0 :(得分:0)
应用程序顶部显示的“上下文操作栏”,可以通过以下解决方案中显示的示例禁用复制,剪切,粘贴,替换,全选图标:
至于“选项气泡”(如下图所示),当单击文本选择手柄并且剪贴板中有文本或某些要替换的文本时,会出现此信息:
为了禁用此功能,必须防止PASTE / REPLACE菜单出现在(未记录的)android.widget.Editor
类的show()方法中。在菜单出现之前,检查if (!canPaste && !canSuggest) return;
。用作设置这些变量的基础的两个方法都在EditText
类:
isSuggestionsEnabled()
为public
,因此可能会被覆盖。canPaste()
不是,因此必须在派生类中由introducing a function of the same name隐藏。更完整的答案,EditText
类的示例覆盖,以及列出的所有解决方案的合并,都是available here。