我想在按下Menu
手机上的按钮时执行自定义操作。
是否可以在按钮上设置 onClickListener (或类似的),如果可以,如何设置?
onCreateOptionsMenu
仅在第一次按下按钮时调用 - 我已经尝试过了。
我想在按下Menu
手机上的按钮时执行自定义操作。
是否可以在按钮上设置 onClickListener (或类似的),如果可以,如何设置?
onCreateOptionsMenu
仅在第一次按下按钮时调用 - 我已经尝试过了。
通常您不应该覆盖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);
}
但是onPrepareOptionsMenu(..)
每次都被调用。:)
更新 AppCompat v.22.+
如本论坛所述,KeyDown
按下 KEYCODE_MENU 按钮时不会调用。
解决方案是以这种方式覆盖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);
}
它一直有效,直到 Google 开发人员为此发布修复程序(或者它可能不是错误,并且从现在开始以这种方式工作)。
你可能会在使用“OnMenuOpened”或类似的东西时破解一些东西,但我真的不推荐它。菜单按钮应该只用于显示菜单,因此应用程序之间存在一致性。