我试图覆盖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而不是打开菜单。
还有其他方法可以实现这一目标吗?也许直接触发溢出图标点击?但是我怎样才能访问它?
答案 0 :(得分:0)
很长一段时间以来,您发布了此消息,但如果您找不到解决方案,我会分享我的经验。
实际上我正在寻找相同的行为(你按下菜单键,菜单出现在操作栏上,而不是在屏幕底部,就像你触摸溢出图标一样,如 Telegram )
我重写onKeyDown
和onKeyUp
方法,如下所示:
@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 为您创建的空白活动模板。 (请仔细查看代码,主题和布局)