У меня есть 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);
Он работает нормально, и я могу щелкнуть по нему (хотя он, очевидно, ничего не делает). Что мне здесь не хватает?
Edit: Просто хотел добавить, что я сталкиваюсь с той же проблемой, если я действительно раздуваю меню вместо того, чтобы добавлять пункты меню программно. И снова проблема исчезнет, если я заставлю ее всегда отображать как действие.