android - 升级到api v26.1.0后Hard Menu Button不触发AppCompatActivity的onKeyDown

标签 android android-support-library

在我将 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/

相关文章:

android - 应用商店/市场 : migrate existing user base

android - 谷歌语音识别库或 API

ScrollView 中的 Android ListView 行未完全显示 - 已剪辑

android - NavUtils.getParentActivityIntent() 抛出 "Activity does not have a parent activity name specified."

java - 类型不匹配 : cannot convert from android. support.v4.app.Fragment 到 android.app.Fragment

android - API 26 的文本颜色行为支持库?

php - 如何防止 Android 应用程序在重新安装时从 GCM 接收推送通知,直到用户通过我的 Web 服务进行身份验证

Android ActionMode 标题背景色

android ContextCompat.checkSelfPermission() 未找到

android - SDK 3.0 reauthorizeForPublish() 失去读取权限?