升级到api v26.1.0后,硬菜单按钮不会触发AppCompatActivity的onKeyDown

时间:2018-02-17 07:43:16

标签: android android-support-library

我在Android Studio上将targetSdk从v25.3.1升级到最新v26.1.0后。我不再接到onKeyDown()来电。我在未触发的onKeyDown()方法中有Log。除菜单按钮外,还会为所有其他按钮(如音量和背面)打印日志,并执行相应的功能。按下菜单按钮后背光开启,我确认菜单按钮本身没问题。我在不同的设备上试过它。 我发现这个错误曾经在v22中找到,后来由谷歌修复。我找到了Mattia Maestrini提出的解决方案,但对我来说并不适用。我想问题可能是一样的。任何建议或帮助。感谢。

更新:似乎现在没有人有答案。但如果这是一个更新错误,我猜其他人也应该有这个问题。直到那时我将我的代码从onKeyDown()转移到dispatchKeyEvent(),这同样有效。

1 个答案:

答案 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()。