在我将 targetSdk 从 v25.3.1
升级到 Android Studio 上的 v26.1.0
之后。我不再调用 onKeyDown()
。我在未触发的 onKeyDown()
方法中有日志。除了菜单按钮之外,所有其他按钮(如音量和后退)的日志都会被打印出来,并且它们的相应功能也会被执行。按下菜单按钮后背光灯亮起,我确认菜单按钮本身没问题。我在不同的设备上试过。
我发现在v22
中曾经发现过这样的bug,后来被google修复了。我找到了 Mattia Maestrini 提出的解决方案,但它对我不起作用。我想问题可能是一样的。任何建议或帮助。谢谢。
更新:似乎暂时没有人知道答案。但如果这是一个更新错误,我想其他人也应该有这个问题。直到那时我将我的代码从 onKeyDown()
转移到 dispatchKeyEvent()
,这同样有效。
最佳答案
我自己刚遇到这个问题,我想我找到了它发生的原因。 super.dispatchKeyEvent() 方法中的菜单键有一个特殊情况。如果你check the source Activity.java,你会看到它在这种情况下消耗了按键:
if (keyCode == KeyEvent.KEYCODE_MENU &&
mActionBar != null && mActionBar.onMenuKeyEvent(event)) {
return true;
}
基本上,如果你按下菜单键,有一个actionBar,并且actionBar的onMenuKeyEvent()消耗事件,dispatchKeyEvent()也会消耗事件。当事件被消费时,它不会将事件传递给 onKeyDown()
我的问题的解决方案是删除我的操作栏并将其替换为工具栏(无论如何我的操作栏并没有做太多事情)。在我这样做之后,我能够在我的应用程序中接收到 onKeyDown()。
关于android - 升级到api v26.1.0后Hard Menu Button不触发AppCompatActivity的onKeyDown,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48839125/