7

我希望我的 Android 设备上的菜单键打开一个对话框,而不是在我的应用程序运行时打开菜单。我试图将其编码,onCreateOptionsMenu(Menu menu)但它仅在我第一次按下菜单按钮时才起作用。我可以用其他方式吗?

4

2 回答 2

15

您可以通过在 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);
}

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

于 2013-10-06T23:18:49.887 回答
1

我在我的活动中使用它来覆盖返回键,它应该对菜单键起作用:

@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);
  }
}
于 2013-10-05T20:27:00.970 回答