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中的任何其他位置使用相同可绘制资源的图标上。实际上,我应该说它将与basic
Drawable
s一起工作。我似乎还记得
StateListDrawable
s上的
ColorFilter
s的一些其他问题。试一试,让我知道你的结果。