如何以编程方式更改操作栏菜单项的颜色

时间:2015-01-14 08:33:59

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

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

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

enter image description here

2 个答案:

答案 0 :(得分:1)

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

  1. 根据文档(link):
  2.   

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

    1. MenuInflater忽略布局资源中尝试修改除标题和图标之外的菜单外观的标记。
    2. 因此,只要菜单项的外观由应用主题(可以应用于整个菜单而不是单个项目)决定,我的建议是使用这样的预定义样式:

      <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>
      

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

答案 1 :(得分:0)

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

Here is how to dynamically add a drawable as background

Here how to dynamically change drawable color.

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