0

Amazon Fire 电视棒的遥控器上有一个专用的菜单按钮,我想提供功能但无法覆盖。我可以覆盖遥控器上的所有其他按钮,但不能覆盖菜单按钮。我知道菜单按钮有效,因为它仍然会显示默认的 Android 选项菜单和 MenuFragment。这是我覆盖菜单按钮的代码。

public boolean onKeyUp (int keycode, KeyEvent event) {
    if(keycode == KeyEvent.KEYCODE_MENU) {
        Toast.makeText(this, "menu pressed", Toast.LENGTH_SHORT).show();
        return true;
    }
return super.onKeyUp(keycode, event);
}

我能想到这可能不起作用的唯一原因是,如果我的 mainActivity 中的其他内容也覆盖了菜单按钮,也许是为了运行选项菜单。

谢谢你的帮助!

4

2 回答 2

0

您可能已经更新了 SDK 安装中的支持库,这是 Google 方面的一个已知错误,可能会覆盖该特定按钮的行为。

我相信这将在库的未来版本中得到解决。 https://code.google.com/p/android/issues/detail?id=159795

现在有什么解决办法?

您可以: 在 Gradle 中,打开 build.gradle 文件并进行以下修改:

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    //    compile 'com.android.support:appcompat-v7:22.0.0'
    compile 'com.android.support:appcompat-v7:21.0.3'
}

如果支持库生成错误(下方的波浪形红线),请确保您的 targetSDKVersion 为 19 或更低。

https://stackoverflow.com/a/29852304/2837959

于 2015-05-14T12:39:33.810 回答
0

事实证明这将适用于当前的 appcompat 版本。

@Override
    public boolean dispatchKeyEvent(KeyEvent event) {
        int keyCode = event.getKeyCode();
        int action = event.getAction();
        boolean isDown = action == 0;

        if (keyCode == KeyEvent.KEYCODE_MENU) {
            return isDown ? this.onKeyDown(keyCode, event) : this.onKeyUp(keyCode, event);
        }

        return super.dispatchKeyEvent(event);
    }
于 2015-05-21T18:16:07.090 回答