以下是文档中有关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/