我希望Android设备上的菜单键能打开对话框,而不是在我的应用运行时打开菜单。我尝试将其编码到onCreateOptionsMenu(Menu menu)
,但它仅在我第一次按下菜单按钮时起作用。我可以用其他方式吗?
答案 0 :(得分:15)
您可以通过在“活动”中拦截它们来覆盖系统键按下的默认行为。如果您想阻止系统处理密钥,可以通过覆盖onKeyDown事件并返回true
来完成此操作。您的案例代码应如下所示:
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if ( keyCode == KeyEvent.KEYCODE_MENU ) {
// perform your desired action here
// return 'true' to prevent further propagation of the key event
return true;
}
// let the system handle all other key events
return super.onKeyDown(keyCode, event);
}
这可能不适用于所有键;这样做的原因是在view
收到此消息之前,密钥会被发送到当前activity
。在这种情况下,您还需要覆盖当前视图的onKeyDown
。
答案 1 :(得分:1)
我在我的活动中使用它来覆盖Back键,它对Menu键应该是相同的:
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_MENU && event.getRepeatCount() == 0) {
// Show your menu
} else {
return super.onKeyDown(keyCode, event);
}
}