1. ホーム
  2. android-widget

[解決済み] EditTextから/へのコピー/ペーストを無効にする方法

2022-05-18 01:46:36

質問

私のアプリケーションでは、登録画面があり、ユーザがテキストを EditText フィールドにテキストをコピー/ペーストできないようにしたいのです。そこで onLongClickListener にそれぞれ EditText を追加して、コピー/ペースト/入力メソッドやその他のオプションを表示するコンテキストメニューが表示されないようにしました。そのため、ユーザーは編集フィールドにコピー/ペーストすることができません。

 OnLongClickListener mOnLongClickListener = new OnLongClickListener() {

        @Override
        public boolean onLongClick(View v) {
            // prevent context menu from being popped up, so that user
            // cannot copy/paste from/into any EditText fields.
            return true;
        }
    };

しかし、ユーザーが Android のデフォルト以外のサードパーティのキーボードを有効にしている場合、問題が発生します。そのキーボードにはコピー/ペーストのボタンがあったり、同じコンテキストメニューが表示されたりすることがあります。そのようなシナリオでコピー/貼り付けを無効にするにはどうすればよいでしょうか?

他にコピー/貼り付けを行う方法があれば教えてください。(そして、おそらくそれらを無効にする方法も。)

どんな助けでも感謝します。

どのように解決するのですか?

API レベル 11 以上を使用している場合、コピー、貼り付け、切り取り、およびカスタム コンテキスト メニューを表示しないようにすることができます。

edittext.setCustomSelectionActionModeCallback(new ActionMode.Callback() {

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

            public void onDestroyActionMode(ActionMode mode) {                  
            }

            public boolean onCreateActionMode(ActionMode mode, Menu menu) {
                return false;
            }

            public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
                return false;
            }
        });

onCreateActionMode(ActionMode, Menu)でfalseを返すと、アクションモード(Select All, Cut, Copy and Pasteアクション)が開始されないようにしました。