【问题标题】:How to change color of action bar menu items programmatically如何以编程方式更改操作栏菜单项的颜色
【发布时间】:2015-01-14 08:33:59
【问题描述】:

我已经实现了一个应用程序,其中操作栏菜单项的背景颜色需要是动态的。我知道我们可以使用以下代码动态更改操作栏颜色。但它不适用于操作栏菜单项。请帮我解决这个问题。

ActionBar bar = getActionBar();
bar.setBackgroundDrawable(new ColorDrawable("COLOR")); 

【问题讨论】:

  • 希望this能帮到你...
  • 这不是程序化的,我怀疑 OP 想要 Java 代码。
  • 是的,我需要以编程方式执行此操作...

标签: android android-actionbar android-5.0-lollipop


【解决方案1】:

您说过背景颜色需要是动态的。几点:

  1. 根据文档 (link):

如果要根据活动生命周期中发生的事件修改选项菜单,可以在 onPrepareOptionsMenu() 方法中进行。此方法向您传递当前存在的 Menu 对象,以便您可以对其进行修改,例如添加、删除或禁用项目。 (Fragments 还提供了一个 onPrepareOptionsMenu() 回调。)

  1. MenuInflater 会忽略布局资源中尝试修改菜单外观的标签(标题和图标除外)。

因此,只要菜单项的外观由应用主题决定(可以应用于整个菜单而不是单个项目),我的建议是使用如下预定义的样式:

<style name="RedDropDownTheme" parent="AppBaseTheme">
    <item name="android:dropDownListViewStyle">@style/RedDropDownListView</item>
</style>

<style name="RedDropDownListView" parent="android:style/Widget.Holo.ListView.DropDown">
    <item name="android:background">@color/your_red_color</item>
</style>

如果之后需要更改颜色,则必须将新颜色选择保存在共享首选项中,调用活动的 recreate() 方法,并在活动的 onCreate 中应用新主题 (setTheme(R.style.different_color_style)) () 基于共享首选项中的值。

【讨论】:

    【解决方案2】:

    我认为最简单的解决方案是将可绘制对象设置为操作栏的背景,您可以创建一个简单的形状。然后动态改变可绘制的背景。

    Here is how to dynamically add a drawable as background

    Here how to dynamically change drawable color.

    希望这会有所帮助,问候 何塞

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-06-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多