Android:在EditText中删除“粘贴”“替换”textselection气泡

时间:2014-01-16 02:08:53

标签: android android-edittext textselection android-contextmenu

我有一个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;
}

1 个答案:

答案 0 :(得分:0)

应用程序顶部显示的“上下文操作栏”,可以通过以下解决方案中显示的示例禁用复制,剪切,粘贴,替换,全选图标:

至于“选项气泡”(如下图所示),当单击文本选择手柄并且剪贴板中有文本或某些要替换的文本时,会出现此信息:

Text selection handle with paste menu

为了禁用此功能,必须防止PASTE / REPLACE菜单出现在(未记录的)android.widget.Editor类的show()方法中。在菜单出现之前,检查if (!canPaste && !canSuggest) return;。用作设置这些变量的基础的两个方法都在EditText类:

更完整的答案,EditText类的示例覆盖,以及列出的所有解决方案的合并,都是available here