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

hem*_*tsb 85 android background colors android-actionbar navigation-drawer

Android Navigation bar在我的项目中使用,我想将动作栏中的顶部颜色更改为红色,我该怎么做?我有这样的事情,

顶黑

我想要这样的东西,

顶红

我怎么能实现这一目标?

Phi*_*oda 171

您可以通过创建自定义样式来定义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>
Run Code Online (Sandbox Code Playgroud)

然后将"MyCustomTheme"设置为包含ActionBar的Activity的主题.

您还可以为ActionBar设置颜色,如下所示:

ActionBar actionBar = getActionBar();
actionBar.setBackgroundDrawable(new ColorDrawable(Color.RED)); // set your desired color
Run Code Online (Sandbox Code Playgroud)

从这里开始:如何使用XML更改ActionBarActivity的ActionBar的背景颜色?

  • 你是什​​么意思"然后设置"MyCustomTheme"作为包含ActionBar的Activity的主题." 我怎么做? (2认同)
  • 在您的活动XML中,您必须在<android.support.v4.view.ViewPager ... />标签内添加*android:theme ="@ style/MyCustomTheme"*作为参数 (2认同)
  • 那么在android中剩余的valuesv14和valuesv21 styles.xml文件呢? (2认同)

Nic*_*cks 54

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

因此,当您为3.0版及更高版本开发应用程序时,您可以在Android Manifest XML文件中指定三个主流Android操作系统"系统主题"

我在这里指的是(APPCOMPAT)支持库: - 所以三个主题是1. AppCompat Light Theme (Theme.AppCompat.Light)

在此输入图像描述

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

在此输入图像描述

  1. 这两者之间的混合,AppCompat Light Theme与Darker ActionBar.(Theme.AppCompat.Light.DarkActionBar)

AndroidManifest.xml并看到标签,android主题提到: - android:theme ="@ style/AppTheme"

打开Styles.xml,我们在那里声明了基本应用程序主题: -

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
  </style>
Run Code Online (Sandbox Code Playgroud)

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

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>
Run Code Online (Sandbox Code Playgroud)

我们需要在AppTheme中引用这个定义,指出被覆盖的ActionBar样式为 -

@风格/ 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>
Run Code Online (Sandbox Code Playgroud)

我们将在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>
Run Code Online (Sandbox Code Playgroud)

这是最终的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>
Run Code Online (Sandbox Code Playgroud)

ActionBar具有白色标题颜色 有关进一步的ActionBar选项菜单样式,请参阅此链接

  • 嘿,它有效.一个人怀疑如果我想改变菜单溢出图标的颜色,它会根据我们的主题改变颜色吗?黑色主题的白色图标和浅色主题的黑暗图标,我怎么能把它改成白色?考虑你答案中的最后一张图片. (2认同)

Ket*_*hir 33

仅适用于Android 3.0及更高版本

仅支持Android 3.0及更高版本时,您可以像这样定义操作栏的背景:

RES /值/的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>
Run Code Online (Sandbox Code Playgroud)

适用于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>
Run Code Online (Sandbox Code Playgroud)

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

了解更多详情Documentaion


Gjo*_*nov 31

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

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="colorPrimary">@color/green_action_bar</item>
</style>
Run Code Online (Sandbox Code Playgroud)

这就是改变动作栏颜色所需的一切.

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

 <item name="android:colorPrimaryDark">@color/green_dark_action_bar</item>
Run Code Online (Sandbox Code Playgroud)

这是从开发人员Android网站获取的截图,使其更清晰,这里是一个链接,阅读更多关于自定义颜色palete

在此输入图像描述


小智 7

制作的另一种可能性.

actionBar.setBackgroundDrawable(new ColorDrawable(Color.parseColor("#0000ff")));


小智 5

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

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="titleTextColor">#333333</item>
</style>
Run Code Online (Sandbox Code Playgroud)