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

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

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.