覆盖android上的物理菜单按钮

时间:2013-10-05 20:05:38

标签: android android-menu android-keypad

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

2 个答案:

答案 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);
  }
}