在EditText上禁用剪贴板建议中的粘贴

问题描述

为防止EditText从剪贴板接收内容,我禁用了长按和可选择的文本,并清除了操作模式菜单

EditText editText = findViewById(R.id.et);
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;
        }
    });
    editText.setTextIsSelectable(false);
    editText.setLongClickable(false);

问题是我不断收到剪贴板建议,这些建议在被选中时会粘贴到我的EditText中。如何禁用此内容或仅忽略此粘贴内容

解决方法

要禁用过去从键盘,键盘扩展名,操作菜单和任何其他类型进行的所有复制,您可以将textChangeListener添加到EditText并按如下所示签入方法beforeTextChanged

editText.addTextChangedListener(object : TextWatcher {
        override fun afterTextChanged(s: Editable?) {}

        override fun beforeTextChanged(s: CharSequence?,start: Int,count: Int,after: Int) {
            if (after - count > 1) {
                editText.setText(s)
                editText.setSelection(s.toString().length)
            }
        }

        override fun onTextChanged(s: CharSequence?,before: Int,count: Int){}

    })

如果某人一次超过一个字符,则此解决方案有效。祝你好运