Java InvalidateOptions功能表不在旧API上重新创建项
我正在Java InvalidateOptions功能表不在旧API上重新创建项,java,android,Java,Android,我正在onCreateOptionsMenu()上动态设置我应用程序中膨胀的菜单项的样式。我有一个标志,我检查,如果我想样式他们,我继续。如果我不想为它们设置样式,我将完全跳过样式设置 @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.toolbar_menu, menu); if(mStyleMenu) styleMenu(menu
onCreateOptionsMenu()
上动态设置我应用程序中膨胀的菜单项的样式。我有一个标志,我检查,如果我想样式他们,我继续。如果我不想为它们设置样式,我将完全跳过样式设置
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.toolbar_menu, menu);
if(mStyleMenu)
styleMenu(menu);
return true;
}
我使用invalidateOptionsMenu()
随时摆脱样式设置。这适用于棒棒糖和更高的系统。样式将从这些菜单项中删除。不过,在Kitkat和Jelly Bean(例如)上,这些物品保持了风格
我已经检查了invalidateOptions菜单()
上的注释,它说项目已重新创建。因此,我无法解释为什么在旧系统上会发生这种情况
有人能告诉我发生了什么事吗
谢谢。要在运行时修改菜单,您必须实现
on prepareOptions功能表
功能。请参阅。谢谢您的回复,Zelig63。不过,这不是我的问题。我使用的方法工作正常,因为invalidateOptions菜单()
会导致调用和重画onCreateOptions菜单()
。我甚至在需要的时候用它来隐藏一些物品。我的问题是,为什么在棒棒糖前的设备上,即使我对菜单进行了充气,这些项目也不会被重新创建。你真的需要支持Kitkat和Jelly Bean吗?请你的问题提供一个例子来说明这个问题。我主要想知道你是如何设计这些项目的。另外,您是否在非功能版本上进行了调试,以确保您的invalidateOptions功能表()
调用正在执行,onCreateOptions功能表()
确实正在运行,并且mStyleMenu
在运行时具有预期值?当然。我们并不真正需要完整、实际的方法;足以证明这个问题。现在您已经在可绘制的
上提到了颜色过滤器
,但是,在不同版本之间可能会出现更多问题。如果我正确理解了您的描述,而问题基本上只是关于可绘制的
s,那么我会尝试的第一件事——如果您在那里设置了的话——是在设置颜色过滤器之前对可绘制的
进行变异();e、 例如,menuItem.getIcon().mutate().setColorFilter(…)
。与此同时,我会尝试在这里启动并运行一个测试。哦,等等,对不起mutate()
确实有效。您只需确保在所有图标上执行此操作,尤其是在它们之间或在UI中的任何其他位置使用相同可绘制资源的图标上。实际上,我应该说它将与basicDrawable
s一起工作。我似乎还记得StateListDrawable
s上的ColorFilter
s的一些其他问题。试一试,让我知道你的结果。