安卓:我怎样才能设置一个侦听器添加到菜单按钮?
-
21-09-2019 - |
题
我想要做自定义操作在手机上的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(..)
被称为各一次。 :)
更新了程序兼容性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);
}
它的工作原理,直到谷歌开发者发布此修复程序(或者它是不是一个错误,它从现在开始以这种方式工作)。
您也许可以砍东西在使用“OnMenuOpened”或一些这样的,但我真的不会推荐它。菜单按钮只应该被用于显示菜单,所以在应用程序之间的一致性。
不隶属于 StackOverflow