首页 > 解决方案 > 在 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。如何禁用此功能或干脆忽略此粘贴的内容?

标签: javaandroidgboard

解决方案


要从键盘、键盘扩展、操作菜单和任何其他类型禁用所有类型的复制过去,您可以将 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?, start: Int, before: Int, count: Int){}

    })

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


推荐阅读