我在Android Studio上将targetSdk从v25.3.1
升级到最新v26.1.0
后。我不再接到onKeyDown()
来电。我在未触发的onKeyDown()
方法中有Log。除菜单按钮外,还会为所有其他按钮(如音量和背面)打印日志,并执行相应的功能。按下菜单按钮后背光开启,我确认菜单按钮本身没问题。我在不同的设备上试过它。
我发现这个错误曾经在v22
中找到,后来由谷歌修复。我找到了Mattia Maestrini提出的解决方案,但对我来说并不适用。我想问题可能是一样的。任何建议或帮助。感谢。
更新:似乎现在没有人有答案。但如果这是一个更新错误,我猜其他人也应该有这个问题。直到那时我将我的代码从onKeyDown()
转移到dispatchKeyEvent()
,这同样有效。
答案 0 :(得分:1)
我自己遇到了这个问题,并认为我发现了它为什么会发生。 super.dispatchKeyEvent()方法中的菜单键有一种特殊情况。如果你是Activity.java的check the source,那么在这种情况下你会看到它消耗了按键:
if (keyCode == KeyEvent.KEYCODE_MENU &&
mActionBar != null && mActionBar.onMenuKeyEvent(event)) {
return true;
}
基本上,如果你按下菜单键,有一个actionBar,并且actionBar的onMenuKeyEvent()使用该事件,dispatchKeyEvent()也将使用该事件。当事件被消耗时,它不会将事件传递给onKeyDown()
我的问题的解决方案是删除我的操作栏并将其替换为工具栏(我的操作栏无论如何都做得不多)。在我这样做之后,我能够在我的应用程序中收到onKeyDown()。