Android:onKeyUp() 事件被触发,即使焦点在 EditText 上



以下是文档对Activity.onKeyUp()

在释放密钥且未由任何视图处理时调用 活动内部。因此,例如,在光标时按键 在文本视图中不会触发事件(除非它是 导航到另一个对象),因为 TextView 处理自己的键 印刷机。

但是,如果我覆盖活动的onKeyUp()并检查它在焦点位于EditText中时键入键时是否被触发,我可以看到onKeyUp()在以下场景中被触发(在 AVD 上测试)。

  • 如果通过硬件键盘按下某个键。
  • 如果从虚拟键盘输入数字键(不会为字符键触发事件)。

如果我正确理解了文档,onKeyUp()不应该在上述情况下被解雇。

那么,是文档错误,还是我误解了它?

还有其他方法可以捕获任何其他 UI 元素未处理的键盘事件吗?

这似乎确实是一个错误,因为如果EditText有焦点,onKeyDown就不会正确地调用它。然而,这确实意味着我们可以添加一个黑客来确定我们是否应该对onKeyUp事件做出反应。以下是我的处理方式:

private val filteredEvents = HashMap<Long, KeyEvent>()
override fun onKeyUp(keyCode: Int, event: KeyEvent): Boolean {
filteredEvents.remove(event.downTime)?.let {
Log.d("TAG", "Filtered event occurred. Handle it here.")
}
return super.onKeyUp(keyCode, event)
}
override fun onKeyDown(keyCode: Int, event: KeyEvent): Boolean =
super.onKeyDown(keyCode, event.also { filteredEvents[it.downTime] = it })

相关内容

  • 没有找到相关文章

最新更新