Как добавить дополнительные параметры в контекстную панель действий Android по умолчанию

Как мы знаем, по умолчанию после выбора текста в представлениях Android отображает контекстную панель действий (CAB) с некоторыми параметрами по умолчанию, такими как: копировать, вырезать, выбрать все...

Теперь я хочу иметь приложение (которое имеет только 2 варианта: ON/OFF). Если я его включу, некоторые другие параметры будут добавлены в CAB по умолчанию. Если я отключу его, мои пользовательские параметры будут удалены из CAB Android по умолчанию.

У меня вопрос: можно ли добавить / удалить некоторые параметры в этой CAB по умолчанию? Как я могу подать заявку выше?

Спасибо!

1 ответ

Вам придется использовать setCustomSelectionActionModeCallback на каждом из ваших TextViews.

Вы можете иметь логическое значение:

boolean on = true;

Затем создайте метод, который на самом деле редактирует CAB следующим образом:

private void editContextualActionBar(ActionMode actionMode, Menu menu) {
    if (on) {
        // adds a new menu item to the CAB
        // add(int groupId, int itemId, int order, int titleRes)
        menu.add(0, R.id.action_to_be_performed, 1, R.string.action_name);
    } else {
        // removes the new menu item
        menu.removeItem(R.id.action_to_be_performed);
    }
}

Наконец, вызовите Callback для вашего TextView с помощью метода editContextualActionBar в onCreateActionMode и выполните действие меню в onActionItemClicked:

textView.setCustomSelectionActionModeCallback(new ActionMode.Callback() {
        @Override
        public boolean onCreateActionMode(ActionMode mode, Menu menu) {
            editContextualActionBar(mode, menu);
            return true;
        }

        @Override
        public boolean onPrepareActionMode(ActionMode mode, Menu menu) {

            return false;
        }

        @Override
        public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
            switch (item.getItemId()) {
                case R.id.action_to_be_performed:
                    // perform action
                    return true;
                default:
                    break;
            }
            return false;
        }

        @Override
        public void onDestroyActionMode(ActionMode mode) {

        }
    });
Другие вопросы по тегам