打开溢出菜单,带有硬件菜单按钮

时间:2014-12-17 09:15:07

标签: android android-menu

我试图覆盖Android上硬件菜单按钮的行为,使其打开ActionBar中的溢出菜单。

感谢this question,我可以在ActionBar中显示溢出菜单。但是当我按下硬件菜单按钮时,会打开溢出菜单中的“正常”菜单(位于屏幕底部)。

我尝试通过覆盖onKeyDown(int, KeyEvent)中的Activity来更改此设置,但它不起作用。

if (keyCode == KeyEvent.KEYCODE_MENU) {
    // I am extending android.support.v7.app.ActionBarActivity
    this.getSupportActionBar().openOptionsMenu();

    return true;
}

经过调查,似乎getSupportActionBar()返回android.support.v7.internal.app.WindowDecorActionBar的实例,该实例在openOptionsMenu()中返回false而不是打开菜单。

还有其他方法可以实现这一目标吗?也许直接触发溢出图标点击?但是我怎样才能访问它?

1 个答案:

答案 0 :(得分:0)

很长一段时间以来,您发布了此消息,但如果您找不到解决方案,我会分享我的经验。

实际上我正在寻找相同的行为(你按下菜单键,菜单出现在操作栏上,而不是在屏幕底部,就像你触摸溢出图标一样,如 Telegram

我重写onKeyDownonKeyUp方法,如下所示:

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    switch (keyCode) {
        case KeyEvent.KEYCODE_MENU:
            //Apparently does nothing but prevents menu pop up
            //at bottom of the screen
            return true;
        default:
            return super.onKeyDown(keyCode, event);
    }
}

@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
    switch (keyCode) {
        case KeyEvent.KEYCODE_MENU:
            getSupportActionBar().openOptionsMenu();
            return true;
        default:
            return super.onKeyUp(keyCode, event);
    }
}

我相信代码是自我解释的,同时请注意我在android.support.v7.widget.Toolbar方法中将onCreate设置为我的操作栏:

toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);

注意:实际上不推荐您上面提到的solution,(为什么?缺乏一致性)我建议使用android.support.v7.widget.Toolbar ,类似于 Android Studio 为您创建的空白活动模板。 (请仔细查看代码,主题和布局)