我想要做自定义操作在手机上的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”或一些这样的,但我真的不会推荐它。菜单按钮只应该被用于显示菜单,所以在应用程序之间的一致性。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top