java - 在 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?, start: Int, before: Int, count: Int){}
})
如果有人同时超过一个字符,则此解决方案有效。祝你好运
推荐阅读
- sql - 如何获取一组(Day'sworth)数据的 MAX 值的小时?
- groovy - 查找具有指定标签和跃点的任意方向的每条路径
- java - 无法在不同的电子邮件服务提供商上呈现 Outlook 邀请
- sprite-kit - 创建新的 SKSpriteNode 与使用 SKSpriteNode 的副本
- r - RStudio:当row.name相同时比较两个不同的数据表
- visual-studio-code - 有没有办法从 VS Code 中的扩展打开工作区?
- asp.net - 身份服务器 4 和 TLS 1.2
- javascript - 如何:HTML / jQuery - 文件上传(图像)预览名称+文件
- angular - *ngFor 值子数组
- angular - 添加反应式 FormGroup 将其他元素动态移动到上述元素后面