我想在按下手机上的Menu
按钮时执行自定义操作。Android:我如何设置一个监听器到MenuButton?
是否可以在按钮上设置onClickListener(或类似),如果是这样,如何?
onCreateOptionsMenu
仅在第一次按下按钮时才会调用 - 我已经试过了。
我想在按下手机上的Menu
按钮时执行自定义操作。Android:我如何设置一个监听器到MenuButton?
是否可以在按钮上设置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);
}
你可能会使用“OnMenuOpened”或其他方法破解一些东西,但我真的不会推荐它。菜单按钮只能用于显示菜单,所以应用程序之间的一致性。
更新了程序兼容性V.22 +
由于在这个forum中提到,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);
}
它的工作原理,直到谷歌开发者发布此修复程序(或者它是不是一个错误,它从现在开始以这种方式工作)。
在appcompat 22.1.x中损坏,至少22.2.1请参阅:https://code.google.com/p/android/issues/detail?id=159795#c20 – 2015-07-31 01:15:07
谢谢 - 这就是我一直在寻找的东西。别担心 - 我不会改变用户体验,但我想在菜单实际呈现之前执行一些自定义操作。 – Mannaz 2010-03-22 09:34:16
yanchenko answert应该是被接受的。 – 2013-04-03 13:32:13
yanchenko有更好的解决方案。 – katzenhut 2014-08-22 12:55:51