我看到了一些关于openOptionsMenu()不能在各种安卓版本上工作的问题的报告,例如:
但是,我遇到的问题似乎与正在使用的appcompat-v7支持库的版本有关。
本质上,使用较新版本的appcompat-v7,如果您的活动扩展了活动,那么当调用openOptionsMenu()时,菜单会显示得很好,但是如果扩展ActionBarActivity或AppCompatActivity (即使用兼容性库),菜单就不会工作。在较早版本的appcompat-v7中,它工作得很好。
它是可复制的,如下:
经过一些测试后,我发现这在appcompat-v7:22.1.0中停止了工作,并且不再适用于这个jar的任何新版本。
这种行为在模拟器和物理设备上是相同的,在我测试它的两个版本的Android版本5.1.1(23)和2.1(7)上也是相同的。
我给这个bug添加了一个注释:Android问题跟踪程序错误
任何建议、想法或解决办法都值得赞赏!
-Steve
发布于 2017-07-04 19:51:12
我想我可能真的找到了解决办法。它涉及重写openOptionsMenu()方法:
@Override
public void openOptionsMenu()
{
mActionBar.showOverflowMenu();
}为了让showOverflowMenu()在物理菜单键低于API 19的设备上工作,请使用以下命令:如何强制操作栏溢出图标显示
mActionBar被指定为这样的:
android.support.v7.widget.Toolbar mActionBar = (android.support.v7.widget.Toolbar) getActionBar(getWindow().getDecorView())这是getActionBar()方法:
public static ViewGroup getActionBar(View view)
{
try
{
if (view instanceof ViewGroup)
{
ViewGroup viewGroup = (ViewGroup) view;
if (viewGroup instanceof android.support.v7.widget.Toolbar)
{
return viewGroup;
}
for (int i = 0; i < viewGroup.getChildCount(); i++)
{
ViewGroup actionBar = getActionBar(viewGroup.getChildAt(i));
if (actionBar != null)
{
return actionBar;
}
}
}
}
catch (Exception e)
{
e.printStackTrace();
}
return null;
}从openOptionsMenu()调用AppCompatActivity现在可以工作了!
注意:我在API 26上测试了,但是由于getActionBar()方法的工作效率远远低于这个值,我看不出它的其余部分会失败。
https://stackoverflow.com/questions/32575557
复制相似问题