Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/183.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
覆盖android上的物理菜单按钮_Android_Android Menu_Android Keypad - Fatal编程技术网

覆盖android上的物理菜单按钮

覆盖android上的物理菜单按钮,android,android-menu,android-keypad,Android,Android Menu,Android Keypad,我希望Android设备上的菜单键可以打开一个对话框,而不是在我的应用程序运行时打开菜单。我试图将其编码到onCreateOptions菜单(Menu Menu)中,但它只在我第一次按下菜单按钮时起作用。我可以用其他方法吗?我在活动中使用此选项来覆盖后退键,它对菜单键的作用应相同: @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_MENU &a

我希望Android设备上的菜单键可以打开一个对话框,而不是在我的应用程序运行时打开菜单。我试图将其编码到
onCreateOptions菜单(Menu 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);
  }
}

您可以通过在“活动”中截获系统按键来覆盖系统按键的默认行为。如果要防止系统处理密钥,可覆盖事件并返回
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);
}

但这可能不适用于所有键;原因是在
活动
收到此消息之前,会将密钥发送到当前的
视图
。在这种情况下,您还需要覆盖当前视图的
onKeyDown

感谢@free3dom给出了这个很棒的答案,对新的Android好友非常有用!你可能有这个蹩脚的后续行动的答案。。。欢呼声再次响起。谢谢