将我的targetSdk从v25.3.1升级到最新版本后,在Android Studio上。我不再得到v26.1.0的电话。我在未触发的onKeyDown()方法中包含日志。除菜单按钮外,还会为所有其他按钮(如音量和后退)打印日志,并执行其相应功能。按下菜单按钮时背光灯亮起,我确认菜单按钮本身很好。我在其他设备上尝试过。
我发现这样的错误曾经在onKeyDown()中找到,后来由Google修复。我发现Mattia Maestrini提出的解决方案对我不起作用。我想问题可能是相同的。任何建议或帮助。谢谢。

更新:似乎没有人现在有答案。但是,如果这是一个更新错误,我想其他人也应该有这个问题。直到我将代码从v22传输到onKeyDown()时,它们均能正常工作。

最佳答案

自己就碰到这个问题,以为我知道了为什么会发生。 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()。

关于android - 升级到api v26.1.0后,硬菜单按钮不会触发AppCompatActivity的onKeyDown,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48839125/

10-12 06:26