Android: удалить вставку, заменить пузыри выбора текста в EditText

У меня есть EditText, и когда я выполняю длинный щелчок, выбирается нажимаемое слово, и происходят две другие вещи.

Во-первых, в верхней части приложения появляется контекстная панель действий со значками для копирования, вырезания, вставки, замены, выбора всего.

Во-вторых, вокруг слова появляется другое контекстное меню, похожее на всплывающие подсказки, с такими элементами, как «вставить» и «заменить». Я не уверен, что эти пузыри относятся к конкретному устройству (например, Samsung/Nexus7).

Эти пузыри делают то же самое, что и панель действий, и действительно загромождают экран с открытой программной клавиатурой .... Можно ли как-нибудь отключить пузыри, оставив панель действий вверху?

Я заметил, что «супер» функция в PerformLongClick является родительской функцией для обоих этих вызовов. Если вы заблокируете его, ничего не произойдет. Но я еще не нашел никаких переопределений, которые позволили бы мне выбрать одно, а не другое.

edit: оба контекстных меню также появятся, если вы выполните двойное нажатие.

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;
}

person NameSpace    schedule 16.01.2014    source источник


Ответы (1)


«Контекстную панель действий», которая появляется в верхней части приложения со значками для копирования, вырезания, вставки, замены, выбора всего, можно отключить, следуя примерам, показанным в этих решениях:

Что касается «пузырей опций» (как показано на изображении ниже), они появляются, когда нажимаются маркеры выбора текста и в буфере обмена есть текст или какой-либо текст, который нужно заменить:

Маркер выделения текста с меню вставки

Чтобы отключить это, необходимо предотвратить появление меню ВСТАВИТЬ/ЗАМЕНИТЬ в show() метода (недокументированного) android.widget.Editor класса. Перед появлением меню выполняется проверка if (!canPaste && !canSuggest) return;. Два метода, которые используются в качестве основы для установки этих переменных, находятся в классе EditText:

Более полный ответ с примером переопределения класса EditText и включением всех перечисленных решений доступен здесь.

person CJBS    schedule 06.03.2015