295

细节:

我正在扩展 ActionBarActivity。
自 2011 年 11 月 6 日起,Eclipse 和 SDK 已完全修补。

<uses-sdk android:minSdkVersion="4" android:targetSdkVersion="14" />  

部署到带有 Android 2.3.3
应用程序的三星设备android:theme="@android:style/Theme.Light"

问题:应用程序很轻,但 ActionBar 是蓝色的,带有灰色图标,在蓝色背景色中几乎看不到。我还希望 ActionBar 轻一点,这样它们的灰色图标就更明显了。

我试过修改样式,但无济于事。
我可能错过了一些微不足道的东西。

如何使用 XML 更改 ActionBarActivity 的 ActionBar 的背景颜色?

4

21 回答 21

538

根据文档- “您可以使用 Android 3.0(API 级别 11)中添加的 ActionBar API 控制操作栏的行为和可见性。”

因此,ActionBar 不适用于 API 级别 10 (Android 2.3.3) 的目标环境。

以防万一,如果您的目标是最低 API 级别 11 ,您可以通过定义自定义样式来更改 ActionBar 的背景颜色,如下所示:

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

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

并且,将“MyTheme”设置为应用程序/活动的主题。

于 2012-02-12T14:51:29.033 回答
216

尝试这个

ActionBar bar = getActionBar();
bar.setBackgroundDrawable(new ColorDrawable("COLOR"));
于 2011-11-06T02:18:52.970 回答
127

尝试这个:

ActionBar bar = getActionBar();
bar.setBackgroundDrawable(new ColorDrawable(Color.parseColor("#0000ff")));
于 2013-06-23T14:40:03.363 回答
70

使用这个 - http://jgilfelt.github.io/android-actionbarstylegenerator/

它是一个了不起的工具,可让您通过实时预览自定义您的操作栏。

我尝试了早期的答案,但在更改标签和字母等其他颜色时总是遇到问题,并且花了几个小时调整东西。这个工具帮助我在几分钟内完成了我的设计。

这是该工具的屏幕截图

一切顺利!:)

于 2014-01-28T23:22:44.983 回答
58

我遇到了同样的问题,当我输入该代码时,我的操作栏会变成灰色。您的原始样式表可能看起来像这样:

<style name="AppBaseTheme" parent="android:Theme.Holo.Light.DarkActionBar">
    <!-- API 14 theme customizations can go here. -->
</style>

“DarkActionBar”使您的操作栏保持灰色。我把它改成了这个,它起作用了:

<style name="AppBaseTheme" parent="android:Theme.Holo.Light">
    <!-- API 14 theme customizations can go here. -->
    <item name="android:actionBarStyle">@style/MyActionBar</item>
</style>

<style name="MyActionBar" parent="@android:style/Widget.Holo.Light.ActionBar">
    <item name="android:background">#2aa4cd</item>
    <item name="android:titleTextStyle">@style/Theme.MyAppTheme.ActionBar.TitleTextStyle</item>
</style>        

<style name="Theme.MyAppTheme.ActionBar.TitleTextStyle" parent="android:style/TextAppearance.Holo.Widget.ActionBar.Title">
    <item name="android:textColor">#FFFFFF</item>
</style>    

我还介绍了如何编辑文本颜色。此外,无需更改资源周围的任何内容。

-沃伦

于 2013-05-13T00:43:27.583 回答
39

Actionbar 的行为也可以在 API < 11 中更改

请参阅Android 官方文档以供参考

我正在构建一个应用程序,minSdkVersion = "9"targetSdkVersion = "21"更改了操作栏的颜色,它在 API 级别 9 上运行良好

这是一个xml

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.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">@color/actionbar_background</item>

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

并设置您想要的操作栏颜色

res/values/colors.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="actionbar_background">#fff</color> //write the color you want here
</resources>

动作栏颜色也可以在.class文件中定义,代码片段是

ActionBar bar = getActionBar();
bar.setBackgroundDrawable(new ColorDrawable(Color.parseColor("#0000ff")));

但这不适用于API < 11,因此设置操作栏的样式xml是 API < 11 的唯一方法

于 2015-01-08T19:03:40.903 回答
21

使用您的颜色代码直接添加此行

getSupportActionBar().setBackgroundDrawable(
    new ColorDrawable(Color.parseColor("#5e9c00")));

不需要每次都创建 ActionBar 对象...

于 2016-06-08T11:29:39.997 回答
15

在 Nexus 4 上,这似乎使颜色变为灰色。

ActionBar bar = getActionBar(); // or MainActivity.getInstance().getActionBar()
bar.setBackgroundDrawable(new ColorDrawable(0xff00DDED));
bar.setDisplayShowTitleEnabled(false);  // required to force redraw, without, gray color
bar.setDisplayShowTitleEnabled(true);

(这篇文章的所有功劳,但它隐藏在评论中,所以我想在这里展示它) https://stackoverflow.com/a/17198657/1022454

于 2014-05-19T03:43:21.177 回答
14

尝试一行代码:

getActionBar().setBackgroundDrawable(new ColorDrawable(getResources().getColor(R.color.MainColor)));
于 2015-02-04T10:54:19.563 回答
7

使用下面的代码为操作栏文本和操作栏背景提供不同的颜色,只需在清单中针对您想要输出的活动使用下面的主题:)

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

<style name="MyActionBar" parent="@android:style/Widget.Holo.Light.ActionBar">
    <item name="android:titleTextStyle">@style/TitleBarTextColor</item>
    <item name="android:background">YOUR_COLOR_CODE</item>
</style>

<style name="TitleBarTextColor" parent="@style/TextAppearance.AppCompat.Widget.ActionBar.Title">
    <item name="android:textColor">YOUR_COLOR_CODE</item>
</style>
于 2014-08-21T08:44:43.577 回答
6

这是您可以更改操作栏颜色的方法。

import android.app.Activity;
import android.content.Context;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.os.Build;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;


public class ActivityUtils {

public static void setActionBarColor(AppCompatActivity appCompatActivity, int colorId){
    ActionBar actionBar = appCompatActivity.getSupportActionBar();
    ColorDrawable colorDrawable = new ColorDrawable(getColor(appCompatActivity, colorId));
    actionBar.setBackgroundDrawable(colorDrawable);
}

public static final int getColor(Context context, int id) {
    final int version = Build.VERSION.SDK_INT;
    if (version >= 23) {
        return ContextCompat.getColor(context, id);
    } else {
        return context.getResources().getColor(id);
    }
}
}

从您的 MainActivity.java 更改操作栏颜色,如下所示

    ActivityUtils.setActionBarColor(this, R.color.green_00c1c1);
于 2017-05-25T09:00:49.123 回答
5

当您扩展活动时,请使用以下代码

ActionBar actionbar = getActionBar();
actionbar.setBackgroundDrawable(new ColorDrawable("color"));

当您扩展 AppCompatActivity 时,请使用以下代码

ActionBar actionbar = getSupportActionBar();
actionbar.setBackgroundDrawable(new ColorDrawable("color"));
于 2018-03-14T06:00:50.793 回答
4

2021:没有弃用的 Kotlin oneliner:

supportActionBar?.setBackgroundDrawable(ColorDrawable(ContextCompat.getColor(this,R.color.red)))

只需将其放入 onCreate 并根据您的需要更改颜色

于 2021-04-15T16:27:01.333 回答
3

这对我有用,对于 AppCompatActivity,

    <item name="actionBarStyle">@style/BlackActionBar</item>
</style>

<style name="BlackActionBar" parent="@style/Widget.AppCompat.ActionBar.Solid">
    <item name="background">@android:color/black</item>
    <item name="titleTextStyle">@style/BlackActionBarTitleTextStyle</item>
</style>

<style name="BlackActionBarTitleTextStyle" parent="@style/TextAppearance.AppCompat.Widget.ActionBar.Title">
    <item name="android:textColor">@android:color/white</item>
    <item name="android:fontFamily">@font/cinzel_decorative</item>
</style>
于 2019-02-28T18:07:18.730 回答
2

此代码可能会有所帮助

<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light">
    <!-- Customize your theme here. -->
</style>
<style name="Theme.MyTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <!-- customize the color palette -->
    <item name="colorPrimary">@color/material_blue_500</item>
    <item name="colorPrimaryDark">@color/material_blue_700</item>
    <item name="colorAccent">@color/material_blue_500</item>
    <item name="colorControlNormal">@color/black</item>

</style>
<style name="CardViewStyle" parent="CardView.Light">
    <item name="android:state_pressed">@color/material_blue_700</item>
    <item name="android:state_focused">@color/material_blue_700</item>
    <!--<item name="android:background">?android:attr/selectableItemBackground</item>-->
</style>

于 2015-02-26T11:49:45.377 回答
2

如果您使用的是 androidx AppCompact。使用下面的代码。

androidx.appcompat.app.ActionBar actionBar = getSupportActionBar();
actionBar.setBackgroundDrawable(new ColorDrawable("Color"));
于 2020-02-15T10:56:27.410 回答
2

有时这个选项会抛出 NullPointerException

ActionBar actionbar = getActionBar(); actionbar.setBackgroundDrawable(new ColorDrawable("color"));

但是这个选项对我有用。所以你可以试试这个。

getSupportActionBar().setBackgroundDrawable(new ColorDrawable(Color.parseColor("#FFFFFF")));

快乐编码

于 2020-02-04T03:54:58.260 回答
1

对于那些使用 API 21 或更高版本的人来说,它非常简单使用下面的代码

用于深色操作栏

<resources>
<style name="AppTheme" parent="Theme.AppCompat.NoActionBar">
    <!-- Customize your theme here. -->
    <item name="android:background">@color/colorDarkGrey</item>
</style>

for_LightActionBar

<resources>
<style name="AppTheme" parent="Theme.AppCompat.Light.ActionBar">
    <item name="android:background">@color/colorDarkGrey</item>
</style>
于 2019-12-22T08:54:45.310 回答
1

使用此代码..更改操作栏背景颜色。打开“res/values/themes.xml”(如果不存在,创建它)并添加

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

注意:此代码仅适用于 android 3.0 及更高版本

于 2015-09-29T14:01:03.027 回答
0

使用这个,它会工作。

ActionBar actionbar = getActionBar();
actionbar.setBackgroundDrawable(new ColorDrawable("color"));
于 2016-08-24T05:19:16.780 回答
-2
getActionBar().setBackgroundDrawable(new ColorDrawable(getResources().getColor(R.color.TabColor)));

color.xml 文件:

<resources> <color name="TabColor">#11FF00</color> </resources>`
于 2015-12-30T18:32:57.053 回答