Java openOptionsMenu()在appcompat-v7 22.1.0或更新版本中不起作用
我已经看到一些关于openOptionsMenu()无法在各种Android版本上运行的问题的报告,例如: 但我遇到的问题似乎与正在使用的appcompat-v7支持库的版本有关 本质上,对于较新版本的appcompat-v7,如果您的活动扩展了活动,则调用OpenOptions menu()时,菜单将显示良好,但如果您扩展了ActionBarActivity或AppCompative(即使用兼容性库),则菜单将不起作用。在appcompat-v7的旧版本中,它可以正常工作 它是可复制的,如下所示:Java openOptionsMenu()在appcompat-v7 22.1.0或更新版本中不起作用,java,android,android-support-library,android-optionsmenu,options-menu,Java,Android,Android Support Library,Android Optionsmenu,Options Menu,我已经看到一些关于openOptionsMenu()无法在各种Android版本上运行的问题的报告,例如: 但我遇到的问题似乎与正在使用的appcompat-v7支持库的版本有关 本质上,对于较新版本的appcompat-v7,如果您的活动扩展了活动,则调用OpenOptions menu()时,菜单将显示良好,但如果您扩展了ActionBarActivity或AppCompative(即使用兼容性库),则菜单将不起作用。在appcompat-v7的旧版本中,它可以正常工作 它是可复制的,如
-史蒂夫我想我可能已经找到了解决办法。它涉及覆盖
openoptions菜单()
方法:
@Override
public void openOptionsMenu()
{
mActionBar.showOverflowMenu();
}
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;
}
要使showOverflowMenu()
在物理菜单键低于API 19的设备上工作,请使用以下命令:
mActionBar
分配如下:
android.support.v7.widget.Toolbar mActionBar = (android.support.v7.widget.Toolbar) getActionBar(getWindow().getDecorView())
这是getActionBar()
方法:
@Override
public void openOptionsMenu()
{
mActionBar.showOverflowMenu();
}
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;
}
公共静态视图组getActionBar(视图)
{
尝试
{
if(视图组的视图实例)
{
ViewGroup ViewGroup=(ViewGroup)视图;
if(android.support.v7.widget.Toolbar的视图组实例)
{
返回视图组;
}
对于(int i=0;i
从AppCompatActivity调用OpenOptions菜单()
现在可以工作了
注意:我在API 26上对此进行了测试,但鉴于
getActionBar()
方法的工作原理远低于此,我看不出其他方法会失败的原因。比漫游者的帖子更简单,它在genymotion和我的手机(棉花糖)中都很好:
我遇到了相同的错误:(