以下是文档中有关Activity.onKeyUp()的内容


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


但是,如果我覆盖某个活动的onKeyUp()并检查当焦点位于EditText中时键入键时是否触发了该活动,则可以看到在以下情况下onKeyUp()被触发了(在AVD上进行了测试) )。


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


如果我正确理解了文档,则在上述情况下不应触发onKeyUp()

那么,文档是否有误,还是我误解了?

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

最佳答案

这似乎是一个错误,因为如果onKeyDown具有焦点,则不会正确调用EditText。但这确实意味着我们可以添加一个技巧来确定我们是否应该对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 })

关于android - Android:即使焦点在EditText上,也会触发onKeyUp()事件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43920199/

10-12 06:00