如何禁用EditText的粘贴选项?双击/长按EditText时隐藏粘贴按钮
解决EditText仅隐藏「粘贴」选项的问题
你之前的代码里onPrepareActionMode返回false,这会直接阻止整个操作菜单的显示,所以所有选项都被隐藏了。要只移除「粘贴」选项、保留其他操作,需要修改这个方法的逻辑:
edtSetName.customSelectionActionModeCallback = object : ActionMode.Callback { override fun onCreateActionMode(mode: ActionMode?, menu: Menu?): Boolean { // 允许创建操作菜单 return true } override fun onPrepareActionMode(mode: ActionMode?, menu: Menu?): Boolean { // 精准找到「粘贴」菜单项并隐藏 menu?.findItem(android.R.id.paste)?.isVisible = false // 部分系统有「粘贴为纯文本」选项,需要隐藏的话可以加下面这行 // menu?.findItem(android.R.id.pasteAsPlainText)?.isVisible = false // 返回true让处理后的菜单正常显示 return true } override fun onActionItemClicked(mode: ActionMode?, item: MenuItem?): Boolean { // 保留复制、剪切等其他操作的默认行为 return when (item?.itemId) { android.R.id.copy, android.R.id.cut -> { mode?.finish() true } else -> false } } override fun onDestroyActionMode(mode: ActionMode?) {} }
关键说明
onCreateActionMode返回true:确保系统能正常创建操作菜单框架。onPrepareActionMode处理菜单显示:通过系统内置的android.R.id.paste定位粘贴选项,设置为不可见;如果遇到部分系统自定义的菜单文字,也可以遍历菜单项匹配标题来隐藏:
for (i in 0 until menu?.size()!!) { val item = menu.getItem(i) if (item.title == "粘贴") { item.isVisible = false } }
onActionItemClicked保留其他操作:根据需求处理复制、剪切等选项的逻辑,示例中保留了系统默认行为。
内容的提问来源于stack exchange,提问作者Duy Lê Thế
相关产品推荐
相关产品推荐

