Кнопка переполнения принудительно завершает действие режима - PullRequest
8 голосов
/ 27 февраля 2012

У меня есть EditText, и я хочу, чтобы пользователь мог выбрать некоторый текст и применить базовое форматирование к выделенному тексту (жирный, курсив и т. Д.). Я все еще хочу показать стандартные опции копирования, вырезания, вставки, хотя. Я где-то прочитал в документации по Android, что для этого вы должны вызвать setCustomSelectionActionModeCallback () в EditText и передать ему ActionModeCallback (), так что я так и сделал. Вот мой код:

В методе onCreate () моей деятельности:

myEditText.setCustomSelectionActionModeCallback(new TextSelectionActionMode());

Объявление обратного вызова:

private class TextSelectionActionMode implements ActionMode.Callback {
    @Override
    public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
        return false;
    }

    @Override
    public boolean onCreateActionMode(ActionMode mode, Menu menu) {
        menu.add("Bold");
        return true;
    }

    @Override
    public void onDestroyActionMode(ActionMode mode) {
    }

    @Override
    public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
        return false;
    }
}

Проблема, с которой я столкнулся, заключается в том, что когда я нажимаю кнопку переполнения (чтобы получить доступ к моему пункту меню «Жирный»), ActionMode немедленно закрывается. Если я установлю его всегда показывать как действие, используя это:

MenuItem bold = menu.add("Bold");
bold.setShowAsActionFlags(MenuItem.SHOW_AS_ACTION_ALWAYS);

Он отлично работает, и я могу нажать на него (хотя, очевидно, он ничего не делает). Что мне здесь не хватает?

Редактировать: Просто хотел добавить, что я сталкиваюсь с точно такой же проблемой, если я надуваю меню вместо того, чтобы добавлять пункты меню программно. И снова проблема исчезнет, ​​если я заставлю ее всегда показывать действие.

Ответы [ 3 ]

3 голосов
/ 27 марта 2012

Это проблема фреймворков.Если текстовое представление получает событие «фокус изменен», текстовое представление останавливает режим действия.Когда отображается всплывающее окно с переполнением, текстовый вид пропускает фокус.

1 голос
/ 18 августа 2015

Эта проблема была решена в Android 6.0.Однако вы должны использовать ActionMode.Callback2 , как описано здесь в Android 6.0.

Для Android 5.x и ниже, я рекомендую этот обходной путь: добавьте кнопку к Toolbar или ActionBar, который записывает текущий выбор, а затем открывает другое контекстное меню.

this.inputText_selectionStart = inputText.getSelectionStart();
this.inputText_selectionEnd = inputText.getSelectionEnd();
registerForContextMenu(inputText);
openContextMenu(inputText);
unregisterForContextMenu(inputText);
0 голосов
/ 30 марта 2016

Это ошибка Android: https://code.google.com/p/android/issues/detail?id=82640. Эта ссылка содержит обходной путь.К счастью, это было исправлено в Android 6.0.

...