TextView: как предотвратить отображение меню действий при выделении текста в TextView? - PullRequest
0 голосов
/ 30 мая 2020

У меня есть выбираемый TextView. Я хочу предотвратить отображение контекстного меню при выделении текста.

Я реализовал этот код, но панель действий и контекстное меню все еще отображаются.

   tv.setCustomSelectionActionModeCallback(new ActionMode.Callback() {
        @Override
        public boolean onCreateActionMode(ActionMode mode, Menu menu) {
            // Return true to ensure the yourTextView is still selectable
            return true;
        }

        @Override
        public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
            // Remove all action items to provide an actionmode-less selection
            menu.clear();
            return false;
        }

        @Override
        public boolean onActionItemClicked(ActionMode actionMode, MenuItem menuItem) {
            return false;
        }

        @Override
        public void onDestroyActionMode(ActionMode actionMode) {

        }
    });

Как его можно удалить навсегда?

Ответы [ 2 ]

0 голосов
/ 31 мая 2020

Подумал и наконец написал такой код:

    tv.setCustomSelectionActionModeCallback(new ActionMode.Callback() {
        @Override
        public boolean onCreateActionMode(ActionMode mode, Menu menu) {
            removeActionBar(getWindow().getDecorView());
            return true;
        }

        @Override
        public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
            return false;
        }

        @Override
        public boolean onActionItemClicked(ActionMode actionMode, MenuItem menuItem) {
            return false;
        }

        @Override
        public void onDestroyActionMode(ActionMode actionMode) {

        }
    });

    private void removeActionBar(View v) {
            ViewGroup viewgroup = (ViewGroup) v;

            for (int i = 0; i < viewgroup.getChildCount(); i++) {
                    View v1=viewgroup.getChildAt(i);
                    if ( v1 instanceof ViewGroup )
                            removeActionBar(v1);
                    if ( v1 instanceof ActionBarContextView ) {
                            viewgroup.removeView(v1);
                    }
            }
    }
0 голосов
/ 30 мая 2020
@Override
        public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
            menu.removeItem(android.R.id.selectAll);
            menu.removeItem(android.R.id.cut);
            menu.removeItem(android.R.id.copy);
            menu.removeItem(android.R.id.paste);
            menu.removeItem(android.R.id.replaceText);
            menu.removeItem(android.R.id.shareText);
            return true;
        }

Попробуйте вручную удалить пункт из меню. Надеюсь, теперь все заработает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...