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


277

细节:

我正在扩展ActionBarActivity。
截至2011年11月6日,Eclipse和SDK已全面修补。

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

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

问题:应用程序很轻,但是ActionBar是带有灰色图标的蓝色,在蓝色背景色下几乎看不到。我还希望ActionBar变浅,以便它们的灰色图标更可见。

我尝试过修改样式,但无济于事。
我可能缺少一些琐碎的东西。

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


2
关闭这个老栗子。根据大众的需求指向Sannidhi,但是对这个问题的回答涵盖了相当多的Android版本,在我看来,David Millers建议使用SherlockActionBar是最相关的。
user77115 2013年

1
其他技巧:如果使XML视图中的第一个元素与ActionBar具有相同的背景(在我们的示例中为白色),则ActionBar变为灰色。
约书亚·品特

当您考虑时,TitleBar和ActionBar不会提供任何特殊功能。它们更像是令人讨厌的东西,尤其是当您不了解它们时。更好的选择是隐藏它们并设计自己的标题栏。您可以将自己的窗口小部件与视图和可绘制对象一起添加。由于标题栏不提供任何小部件。而且对于所有的菜单项,操作栏只能有一个下拉列表。甚至很多应用程序都放弃了操作栏,而倾向于使用自己的操作栏。

Answers:


523

根据文档 -“您可以使用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”设置为应用程序/活动的主题。


12
@AlexanderFragotsis使用<item name="android:textColor">@color/my_color</item>
lethargicpanda

28
如果使用ActionBarCompat库,则应使用相同的方法。唯一的区别是您应该更改actionBarStyle(不带android:前缀)项,以定义actionbar在3.0之前的Android设备上的外观
Alex Semeniuk 2013年

3
是否有可能引用@android:color或定义为中的自定义颜色,而不是放置颜色的十六进制代码colors.xml?我尝试过但没有成功。
jmrodrigg 2014年

1
我无法使用“ <item name =” android:textColor“> @ color / my_color </ item>”更改文本操作栏文本的颜色
Shirish Herwade

2
这对于android:background标记不起作用,但是当我省略android标记并仅放置<item name =“ background”>时,所有平台的颜色都发生了变化。
stevyhacker

209

试试这个

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

1
11-06 10:53:16.985:E / AndroidRuntime(16956):java.lang.NoSuchMethodError:com.acme.myActivity.getActionBar
user77115 2011年

1
@ coder_For_Life22您知道如何获得上下文操作栏吗?
Geeks On Hugs 2012年

5
afaik,支持库本身没有ActionBar,因此您必须包括SherlockActionBar。
大卫·米尔勒

22
也许这很奇怪,但就我而言,bar.setBackgroundDrawable(new ColorDrawable(Color.BLUE));将操作栏颜色更改为灰色。这些情况也提出,如果其他颜色,如Color.REDColor.GREEN等......没有任何人有同样的问题,或者知道这个问题的原因是什么?我使用的是Nexus S设备
AlexAndro,2012年

4
stackoverflow.com/a/17198657/1022454这篇文章似乎解决了操作栏颜色变为灰色的问题。
乔纳森·弗莱

124

试试这个:

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

1
这如何适合其余代码?只是好奇在哪里实际添加它
JGallardo 2014年

7
我有@JGallardo的确切问题。您在哪里添加?我尝试了一下,onCreate但是进行了NullPointerException 编辑:这是我添加到restoreActionBar ActionBar 的代码actionBar = getSupportActionBar(); actionBar.setBackgroundDrawable(new ColorDrawable(Color.parseColor(“#E5E4E2”))));
rockydgeekgod

将其添加到Activity的onCreate方法。
Ojonugwa Jude Ochalifu,2015年

3
使用getActionBar()的getSupportActionBar()instad
Chanaka Fernando

69

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

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

我尝试了较早的答案,但在更改其他颜色(如制表符和字母)上总是遇到问题,并且花了数小时来调整内容。该工具帮助我在短短几分钟内完成了我的设计。

这是该工具的屏幕截图

祝一切顺利!:)


将文件添加到我的应用程序后,如何设置我的应用程序使用文件?
迈克,

在上面的屏幕快照(命名示例)的上下文中,粘贴生成的res文件夹后,您应该具有新样式@ style / Theme.Example。在AndroidManifest.xml中,设置<application android:theme =“ @ style / Theme.example”>。应该工作:)
Mohammad Shabaz Moosa 2015年

1
不推荐使用。不幸的是
Liangjun

55

我遇到了同样的问题,当我输入该代码时,操作栏会变成灰色。您原始的样式表可能如下所示:

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

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

-沃伦


38

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

请参阅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,因此,仅对API <11设置样式的操作栏xml是唯一的方式



在片段中使用时,该片段在我的应用程序中不起作用。我将其更改为ActionBar bar = getActivity()。getActionBar(); 。一旦片段将要打开,它就会崩溃。
Jose Manuel AbarcaRodríguez2015年

1
找到了问题,它可以使用:ActionBar actionBar = getSupportActionBar();
Jose Manuel AbarcaRodríguez2015年

20

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

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

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


1
使用资源来获得颜色而不是将其作为文本会更好。getSupportActionBar().setBackgroundDrawable(new ColorDrawable(getResources().getColor(android.R.color.black)));
Dinesh

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


2
在花了无数小时试图找出WTH错误之后,这个答案对我有所帮助。
阿卜杜拉·乌默尔2014年

13

尝试一行代码:

getActionBar().setBackgroundDrawable(new ColorDrawable(getResources().getColor(R.color.MainColor)));

1
我的应用程序因此答案而崩溃。为了使它在片段中起作用,我像这样更改了它:getActivity()。getActionBar()。setBackgroundDrawable(new ColorDrawable(getActivity()。getResources()。getColor(R.color.col_nar)))); ,还尝试了getActivity()。getActionBar()。setBackgroundDrawable(new ColorDrawable(getResources()。getColor(R.color.col_nar)))); 。片段一打开,它就会崩溃。
Jose Manuel AbarcaRodríguez2015年

1
找到了问题,它可以使用:ActionBar actionBar = getSupportActionBar();
Jose Manuel AbarcaRodríguez2015年

1
答案是针对活动。如果要与片段一起使用,则必须对片段使用getActivity()。getActionBar()
SANAT 2015年

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>

5

这样可以更改操作栏的颜色。

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

5

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

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

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

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

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>


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及更高版本


1

这对我来说很有效,对于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>

1

对于使用API​​ 21或更高版本的用户来说非常简单

用于Dark ActionBar

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

0

使用它,它将起作用。

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

0

有时,此选项引发NullPointerException

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

但是这个选项对我有用。因此,您可以尝试一下。

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

快乐编码


0

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

androidx.appcompat.app.ActionBar actionBar = getSupportActionBar();
actionBar.setBackgroundDrawable(new ColorDrawable("Color"));

-2
getActionBar().setBackgroundDrawable(new ColorDrawable(getResources().getColor(R.color.TabColor)));

color.xml文件:

<resources> <color name="TabColor">#11FF00</color> </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.