如何设置自定义ActionBar的颜色/样式?


Answers:


174

您可以通过创建自定义样式来定义ActionBar(和其他内容)的颜色:

只需编辑您的Android项目的res / values / styles.xml文件。

例如这样:

<resources>
    <style name="MyCustomTheme" parent="@android:style/Theme.Holo.Light">
        <item name="android:actionBarStyle">@style/MyActionBarTheme</item>
    </style>

    <style name="MyActionBarTheme" parent="@android:style/Widget.Holo.Light.ActionBar">
        <item name="android:background">ANY_HEX_COLOR_CODE</item>
    </style>
</resources>

然后将“ MyCustomTheme”设置为包含ActionBar的Activity的主题。

您还可以像这样为ActionBar设置颜色:

ActionBar actionBar = getActionBar();
actionBar.setBackgroundDrawable(new ColorDrawable(Color.RED)); // set your desired color

取自此处:如何使用XML更改ActionBarActivity的ActionBar的背景颜色?


2
您的意思是“然后将“ MyCustomTheme”设置为包含ActionBar的Activity的主题。我怎么做?
Kala J

2
在您的活动XML必须添加“@风格/ MyCustomTheme”主题=:机器人作为<android.support.v4.view.ViewPager ... />标签内paremeter
PedroD

2
android中剩余的valuesv14和valuesv21 styles.xml文件如何处理
Harsha

如何更改标题textStyle?
亚当·赫维兹

@KalaJsetTheme(R.style.MyCustomTheme) 在您的活动的onCreate方法中使用。
NullByte08

57

通常,Android OS利用“主题”来允许应用程序开发人员将一组通用的UI元素样式参数全局应用于整个Android应用程序,或者应用于单个Activity子类。

因此,在开发适用于3.0版及更高版本的应用程序时,可以在Android Manifest XML文件中指定三个主流的Android OS“系统主题”。

我在这里引用(APPCOMPAT)支持库:-因此,这三个主题是1. AppCompat Light主题(Theme.AppCompat.Light)

在此处输入图片说明

  1. AppCompat黑暗主题(Theme.AppCompat),

在此处输入图片说明

  1. 以及两者之间的混合,AppCompat Light主题与Darker ActionBar。(Theme.AppCompat.Light.DarkActionBar)

并查看AndroidManifest.xml的标签,将android主题提到为:-android:theme =“ @ style / AppTheme”

打开Styles.xml,我们在其中声明了基本的应用程序主题:

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
  </style>

我们需要覆盖这些父主题元素以设置操作栏样式。

具有不同颜色背景的ActionBar:-

为此,我们需要创建一个新样式MyActionBar(您可以提供任何名称),并带有对@ style / Widget.AppCompat.Light.ActionBar.Solid.Inverse的父引用, 其中包含Android ActionBar UI元素的样式特征。所以定义是

<style name="MyActionBar" parent="@style/Widget.AppCompat.Light.ActionBar.Solid.Inverse">
    <item name="background">@color/red</item>
</style>

我们需要在AppTheme中引用此定义,指向覆盖的ActionBar样式为-

@ style / MyActionBar 带有粉红色背景色的ActionBar

更改标题栏文本颜色(例如,黑色到白色):-

现在,要更改标题文本的颜色,我们需要覆盖父引用parent =“ @ style / TextAppearance.AppCompat.Widget.ActionBar.Title”>

因此样式定义为

<style name="MyActionBarTitle" parent="@style/TextAppearance.AppCompat.Widget.ActionBar.Title">
    <item name="android:textColor">@color/white</item>
</style>

我们将在MyActionBar样式定义内引用此样式定义,因为TitleTextStyle修改是ActionBar父OS UI元素的子元素。所以MyActionBar样式元素的最终定义是

<style name="MyActionBar" parent="@style/Widget.AppCompat.Light.ActionBar.Solid.Inverse">
    <item name="background">@color/red</item>
    <item name="titleTextStyle">@style/MyActionBarTitle</item>
</style>

所以这是最终的Styles.xml

<resources>
    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light">
        <!-- This is the styling for action bar -->
        <item name="actionBarStyle">@style/MyActionBar</item>
    </style>

    <style name="MyActionBar" parent="@style/Widget.AppCompat.Light.ActionBar.Solid.Inverse">
        <item name="background">@color/red</item>
        <item name="titleTextStyle">@style/MyActionBarTitle</item>
    </style>

    <style name="MyActionBarTitle" parent="@style/TextAppearance.AppCompat.Widget.ActionBar.Title">
        <item name="android:textColor">@color/white</item>
    </style>
</resources>

ActionBar具有白色标题颜色 有关ActionBar选项菜单样式的更多信息,请参考此链接


2
嘿,它有效。一个疑问,如果我想更改菜单溢出图标的颜色,它会根据我们的主题更改颜色吗?深色主题的白色图标和浅色主题的黑色图标,如何将其更改为白色?考虑答案中的最后一张图片。
Ameen Maheen

33

仅适用于Android 3.0及更高版本

仅在支持Android 3.0及更高版本时,您可以定义操作栏的背景,如下所示:

res / values / themes.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <!-- the theme applied to the application or activity -->
    <style name="CustomActionBarTheme" parent="@style/Theme.Holo.Light.DarkActionBar">
       <item name="android:actionBarStyle">@style/MyActionBar</item>
    </style>

<!-- ActionBar styles -->
  <style name="MyActionBar" parent="@style/Widget.Holo.Light.ActionBar.Solid.Inverse">
       <item name="android:background">#ff0000</item>
  </style>
</resources>

对于Android 2.1及更高版本

使用支持库时,样式XML文件可能如下所示:

<?xml version="1.0" encoding="utf-8"?>
  <resources>
  <!-- the theme applied to the application or activity -->
 <style name="CustomActionBarTheme" parent="@style/Theme.AppCompat.Light.DarkActionBar">
    <item name="android:actionBarStyle">@style/MyActionBar</item>

    <!-- Support library compatibility -->
    <item name="actionBarStyle">@style/MyActionBar</item>
</style>

<!-- ActionBar styles -->
<style name="MyActionBar"
       parent="@style/Widget.AppCompat.Light.ActionBar.Solid.Inverse">
    <item name="android:background">@drawable/actionbar_background</item>

    <!-- Support library compatibility -->
    <item name="background">@drawable/actionbar_background</item>
  </style>
 </resources>

然后将您的主题应用于整个应用程序或单个活动:

有关更多详细信息


这很奇怪:您给android 3.0及更高版本提供了比2.1及更高版本更高级的样式(holo)(材料设计/ Appcompat)...
Roel

@DalvikVM是的..Appcompat适用于旧版本。无需将其用于更高版本。在此回答之时,并未引入材料设计。
Ketan Ahir 2015年

我遇到错误:No resource found that matches the given name '@style/Widget.Holo.Light.ActionBar.Solid.Inverse'.将其更改以android:style/Widget.Holo.Light.ActionBar.Solid.Inverse解决问题。谢谢。
Annie Lagang 2015年

在我的情况下,无法解析@ style / Theme.AppCompat.Light.DarkActionBar(Android Studio)-难道不是@android:style / Theme.AppCompat.Light.DarkActionBar-即在样式前面添加“ android”吗?
AgentKnopf 2015年

32

您可以通过以下方式更改操作栏颜色:

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="colorPrimary">@color/green_action_bar</item>
</style>

这就是更改操作栏颜色所需的全部。

另外,如果您想更改状态栏颜色,只需添加以下行:

 <item name="android:colorPrimaryDark">@color/green_dark_action_bar</item>

下面是从开发商的Android网站进行屏幕截图,以使其更清晰,这里是一个链接阅读更多有关自定义颜色palete

在此处输入图片说明



5

我可以使用titleTextColor更改ActionBar文本颜色

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="titleTextColor">#333333</item>
</style>

3

自定义颜色:

 <style name="AppTheme" parent="Theme.AppCompat.Light">

                <item name="colorPrimary">@color/ColorPrimary</item>
                <item name="colorPrimaryDark">@color/ColorPrimaryDark</item>
                <!-- Customize your theme here. -->
     </style>

自定义样式:

 <style name="Theme.AndroidDevelopers" parent="android:style/Theme.Holo.Light">
        <item name="android:selectableItemBackground">@drawable/ad_selectable_background</item>
        <item name="android:popupMenuStyle">@style/MyPopupMenu</item>
        <item name="android:dropDownListViewStyle">@style/MyDropDownListView</item>
        <item name="android:actionBarTabStyle">@style/MyActionBarTabStyle</item>
        <item name="android:actionDropDownStyle">@style/MyDropDownNav</item>
        <item name="android:listChoiceIndicatorMultiple">@drawable/ad_btn_check_holo_light</item>
        <item name="android:listChoiceIndicatorSingle">@drawable/ad_btn_radio_holo_light</item>
    </style>

更多信息:Android ActionBar


2

当我使用 AppCompatActivity上述答案时,这对我没有用。但是以下解决方案有效:

res / styles.xml中

<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
</style>


PS:我用的colorPrimary不是android:colorPrimary


1

在style.xml中添加此代码

<resources>
    <style name="MyTheme" parent="@android:style/Theme.Holo.Light">
        <item name="android:actionBarStyle">@style/MyAction</item>
    </style>

    <style name="MyActionBarTheme" parent="@android:style/Widget.Holo.Light.ActionBar">
        <item name="android:background">#333333</item>
    </style>
</resources>

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.