在安卓系统上覆盖物理菜单按钮

7

当我在使用应用程序时,我希望Android设备上的菜单键打开对话框而不是打开菜单。我尝试将此代码编码到onCreateOptionsMenu(Menu menu)中,但只适用于我按下菜单按钮的第一次。是否还有其他方法可以实现这个功能?

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

然而,这种方法可能并不适用于所有的按键;因为在发送给 activity 之前它们会被发送到当前的 view。在这种情况下,您需要同时重写当前视图的 onKeyDown 方法。


感谢@free3dom提供的出色答案,对新的Android爱好者非常有用!您可能已经知道这个问题的答案了...http://stackoverflow.com/questions/23710375 再次感谢。 - Fattie
我会重写keyUp。谢谢! - nadavfima

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接