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