如何侦听发送到具有输入连接的视图的软键事件?



我想在Android中创建自定义文本编辑器视图,具有可自定义的键控件,这意味着我需要处理所有软件键盘键事件。

为此,我可以扩展View并覆盖其onKeyDown事件。但是,我还想保留用户的完整软件键盘功能,例如建议和滑动键入,这似乎只有在我正确覆盖onCreateInputConnection时才有效:

override fun onCreateInputConnection(outAttrs: EditorInfo): InputConnection {
outAttrs.inputType = InputType.TYPE_CLASS_TEXT
return object : BaseInputConnection(this, true) { ... }
}

不幸的是,InputConnection似乎吃掉了所有的关键事件并阻止调用onKeyDown等关键侦听器方法,而我想同时收听键事件并使用InputConnection(以允许完整的软键盘功能)。

我发现的唯一解决方法是使用TextWatcher来侦听文本更改事件,但我觉得这并不像我需要的那样灵活或简单;我需要完全直接访问所有按键。

我相信这是可能的,因为这正是WebViewinput元素的工作方式:我可以收听它的关键事件,用户可以同时输入带有建议的文本或滑动输入。事实上,我正在考虑使用WebView,但我不明白为什么没有一个就不可能做到这一点。

如何在 Android 中实现此行为,无论是在视图还是可组合对象中?

使用软键盘时,KeyEvents 不存在。 几乎每个软键盘都使用 InputConnection.commitText() 一次发送字符甚至单词。 KeyEvents 仅由硬件键盘、蓝牙键盘和音量等物理键真正生成。

如果你想寻找对文本的更改,实现 commitText() 函数并查看发送到那里的内容。 还有一两个其他函数,如deleteSurroundingText,你也需要覆盖才能获得删除。

相关内容

  • 没有找到相关文章

最新更新