Amazon Fire Tv Stick在它的遥控器上有一个专用菜单按钮,我想提供功能但无法覆盖。我能够覆盖遥控器上的每个其他按钮,但不能覆盖菜单按钮。我知道菜单按钮有效,因为它仍会显示默认的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中的其他内容也会覆盖菜单按钮,也许是为了运行选项菜单。
感谢您的帮助!
答案 0 :(得分: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或更低。
答案 1 :(得分: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);
}