我想在按下手机上的Menu
按钮时执行自定义操作。
是否可以在按钮上设置onClickListener(或类似),如果是,如何设置?
onCreateOptionsMenu
仅在第一次按下按钮时调用 - 我已经尝试过了。
答案 0 :(得分:30)
通常您不应该覆盖MENU
行为,因为用户希望菜单出现,但您可以使用以下内容:
/* (non-Javadoc)
* @see android.app.Activity#onKeyDown(int, android.view.KeyEvent)
*/
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if ( keyCode == KeyEvent.KEYCODE_MENU ) {
Log.d(TAG, "MENU pressed");
return true;
}
return super.onKeyDown(keyCode, event);
}
答案 1 :(得分:19)
但每次都会调用onPrepareOptionsMenu(..)
。 :)
答案 2 :(得分:3)
针对AppCompat v.22。+
进行了更新正如本forum中所述,按下KEYCODE_MENU按钮不会调用KeyDown
。
解决方案是以这种方式覆盖dispatchKeyEvent
:
@Override
public boolean dispatchKeyEvent(KeyEvent event) {
int keyCode = event.getKeyCode();
int action = event.getAction();
boolean isDown = action == KeyEvent.ACTION_DOWN;
if (keyCode == KeyEvent.KEYCODE_MENU) {
return isDown ? this.onKeyDown(keyCode, event) : this.onKeyUp(keyCode, event);
}
return super.dispatchKeyEvent(event);
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if ( keyCode == KeyEvent.KEYCODE_MENU ) {
// do what you want to do here
return true;
}
return super.onKeyDown(keyCode, event);
}
直到谷歌开发人员为此发布一个修复程序(或者它可能不是一个错误,它从现在起以这种方式工作),它才有效。
答案 3 :(得分:1)
你可能会在使用“OnMenuOpened”或其他类似的东西时破解,但我真的不推荐它。菜单按钮仅用于显示菜单,因此应用程序之间存在一致性。