在 EditText 上禁用剪贴板建议中的粘贴
Posted
技术标签:
【中文标题】在 EditText 上禁用剪贴板建议中的粘贴【英文标题】:Disable paste from clipboard suggestions on EditText 【发布时间】:2021-02-17 04:07:00 【问题描述】:为了防止 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。如何禁用此功能或直接忽略此粘贴的内容?
【问题讨论】:
“为了防止 EditText 从剪贴板接收内容,我禁用了长按和文本可选,并清除了操作模式菜单”——还有其他方法可以将内容放入您的 @ 987654322@ 从剪贴板或其他地方。这包括热键 (Ctrl-V)、无障碍服务和自动填充。 那么,我怎样才能有效地防止所有这些输入选项粘贴到我的编辑文本中。 AFAIK,你不能,至少在可访问性方面。 【参考方案1】:要禁用从键盘、键盘扩展、操作菜单和任何其他类型的所有类型的复制过去,您可以将 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)
)
如果有人同时超过一个字符,则此解决方案有效。祝你好运
【讨论】:
以上是关于在 EditText 上禁用剪贴板建议中的粘贴的主要内容,如果未能解决你的问题,请参考以下文章