Удалить пункты меню из панели контекстного действия

При выборе текста в виде текстового андроида контекстная панель действий содержит опции для копирования, вырезания, выбора всех, общего доступа и т.д. Есть ли способ удалить некоторые из этих параметров в моем приложении?

2 ответа

Вы можете раздуть свое собственное меню, а затем скрыть все элементы, которые вставляет ОС.

Во-первых, отслеживайте все идентификаторы для ваших пунктов меню:

List<integer> mOptionsList = new ArrayList<integer>();
/* put these two lines in onCreate() */
mOptionsList.add(R.id.my_option_1);
mOptionsList.add(R.id.my_option_2);
</integer></integer>

Затем скройте любой элемент MenuItem, который не принадлежит вам в onPrepare:

private ActionMode.Callback mActionModeCallback = new ActionMode.Callback() { public boolean onCreateActionMode(ActionMode mode, Menu menu) { ************ inflater = mode.get************(); inflater.inflate(R.menu.my_contectual_menu, menu); return true; } public boolean onPrepareActionMode(ActionMode mode, Menu menu) { for (int i = 0; i < menu.size(); i++) { MenuItem item = menu.getItem(i); if (!mOptionsList.contains(item.getItemId())) item.setVisible(false); } return false; } public boolean onActionItemClicked(ActionMode mode, MenuItem item) { switch (item.getItemId()) { case R.id.my_option_1: { /* do something for option 1 */ break; } case R.id.my_option_2: { /* do something for option 2 */ break; } default: return false; } } public void onDestroyActionMode(ActionMode mode) {}
};


Если вы хотите очистить значки по умолчанию, вы просто используете menu.clear(). Например, если изменить код выше, у нас есть частный ActionMode.Callback mActionModeCallback = new ActionMode.Callback() {

public boolean onCreateActionMode(ActionMode mode, Menu menu) { menu.clear; ... return true;
}

Чтобы удалить конкретный значок, вам необходимо указать идентификатор этого значка. Это будет что-то вроде menu.removeItem(android.R.id.copy) или что-то в этом роде.

licensed under cc by-sa 3.0 with attribution.