当我在使用应用程序时,我希望Android设备上的菜单键打开对话框而不是打开菜单。我尝试将此代码编码到onCreateOptionsMenu(Menu menu)
中,但只适用于我按下菜单按钮的第一次。是否还有其他方法可以实现这个功能?
当我在使用应用程序时,我希望Android设备上的菜单键打开对话框而不是打开菜单。我尝试将此代码编码到onCreateOptionsMenu(Menu menu)
中,但只适用于我按下菜单按钮的第一次。是否还有其他方法可以实现这个功能?
您可以通过在Activity中拦截按键事件来覆盖系统按键的默认行为。这可以通过重写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);
}
然而,这种方法可能并不适用于所有的按键;因为在发送给 activity
之前它们会被发送到当前的 view
。在这种情况下,您需要同时重写当前视图的 onKeyDown
方法。
我在我的活动中使用这个来覆盖返回键,对于菜单键也应该起作用:
@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);
}
}