Android自定义应用内键盘删除键如何删除其他EditText文本
解答
这个需求完全可以实现,不需要额外遍历页面控件或者手动绑定目标EditText。
你代码里持有的inputConnection实例本身就会自动绑定当前获取焦点、正在接收输入的EditText——你现在普通按键调用commitText能往对应输入框写内容,删除操作同样通过这个实例完成即可,效果和系统原生键盘完全一致。
实现方式
直接在删除键的判断分支补充删除逻辑即可,修改后的完整onClick代码:
override fun onClick(v: View) { if (v.id == R.id.button_delete) { // 方案1:响应速度更快,实现点按一次删除光标前1个字符的效果 inputConnection?.deleteSurroundingText(1, 0) // 方案2:如果需要兼容「选中文本后按删除键清空选中内容」的场景,改用发送删除按键事件即可 // inputConnection?.sendKeyEvent(KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_DEL)) // inputConnection?.sendKeyEvent(KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_DEL)) } else { // 普通字符输入逻辑保持原有实现即可 val value = keyValues[v.id] inputConnection?.commitText(value, 1) } }
常见问题排查
- 如果点击键盘按键后输入、删除都失效,检查自定义键盘上的所有按键是否配置了
android:focusable="false"。要是按键抢占了输入焦点,inputConnection会和原EditText断开绑定,自然无法操作输入框内容。 - 如果要做长按删除键连续删除的效果,给删除按钮加长按监听,长按时每隔50ms左右调用一次上面的删除逻辑,手指抬起时终止循环即可,不需要额外修改其他逻辑。
- 页面存在多个EditText的场景下,只要你唤起键盘时正常给当前聚焦的EditText绑定了对应的
inputConnection,删除操作会自动作用在当前正在输入的输入框上,不需要额外做区分判断。
内容的提问来源于stack exchange,提问作者Amy
相关产品推荐
相关产品推荐

