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

use*_*115 266 android android-theme android-actionbar android-styles

细节:

我正在扩展ActionBarActivity.
自2011-11-06起,Eclipse和SDK已完全修补.

<uses-sdk android:minSdkVersion="4" android:targetSdkVersion="14" />  
Run Code Online (Sandbox Code Playgroud)

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

问题:应用程序很轻,但ActionBar是蓝色的灰色图标,蓝色背景颜色几乎看不到.我也希望ActionBar很轻,所以它们的灰色图标更加明显.

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

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

lup*_*oem 511

根据文档 - "您可以使用在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>
Run Code Online (Sandbox Code Playgroud)

并将"MyTheme"设置为应用程序/活动的主题.

  • 如果您使用ActionBarCompat库,则应使用相同的方法.唯一的区别是你应该改变**actionBarStyle**(没有*android:*前缀)项来定义动作栏在3.0之前的Android设备上的外观 (27认同)
  • @AlexanderFragotsis使用`<item name ="android:textColor"> @ color/my_color </ item>`. (12认同)
  • 那很好,如何改变字母的颜色? (5认同)
  • 这不适用于低于11的API. (4认同)
  • 有没有可能,而不是把颜色的十六进制代码,引用`@android:color`甚至是`colors.xml`中定义的自定义颜色?我尝试过没有成功. (3认同)
  • 这对我来说不适用于android:background标签但是当我省略了android标签并且只放了<item name ="background">所有平台的颜色都改变了. (2认同)

cod*_*e22 205

试试这个

ActionBar bar = getActionBar();
bar.setBackgroundDrawable(new ColorDrawable("COLOR"));
Run Code Online (Sandbox Code Playgroud)

  • 也许这很奇怪,但在我的情况下`bar.setBackgroundDrawable(new ColorDrawable(Color.BLUE));`将操作栏颜色更改为灰色.如果放入其他颜色,如"Color.RED","Color.GREEN"等等,也会发生这种情况......有没有人有同样的问题,或者知道这个问题的原因?我使用的是Nexus S设备 (22认同)
  • afaik,支持库本身没有ActionBar,因为你必须包含SherlockActionBar. (5认同)
  • http://stackoverflow.com/a/17198657/1022454这篇文章似乎解决了操作栏颜色变灰的问题. (4认同)

小智 121

试试这个:

ActionBar bar = getActionBar();
bar.setBackgroundDrawable(new ColorDrawable(Color.parseColor("#0000ff")));
Run Code Online (Sandbox Code Playgroud)

  • 我有@JGallardo的确切问题.你在哪里添加这个?我在`onCreate`中尝试了它,但它给了一个`NullPointerException`编辑:这是我添加到`restoreActionBar` ActionBar actionBar = getSupportActionBar(); actionBar.setBackgroundDrawable(new ColorDrawable(Color.parseColor("#E5E4E2"))); (7认同)
  • 使用getActionBar()的getSupportActionBar()实例 (3认同)

Moh*_*osa 69

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

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

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

这是该工具的屏幕截图

祝一切顺利!:)

  • 已弃用。很遗憾 (2认同)

小智 55

我遇到了同样的问题,当我输入代码时,我的操作栏会变灰.机会是你原来的样式表看起来像这样:

<style name="AppBaseTheme" parent="android:Theme.Holo.Light.DarkActionBar">
    <!-- API 14 theme customizations can go here. -->
</style>
Run Code Online (Sandbox Code Playgroud)

"DarkActionBar"让你的Action Bar保持灰色.我把它改成了这个,它起作用了:

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

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

-Warren


Apu*_*rva 38

也可以在API <11中更改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>
Run Code Online (Sandbox Code Playgroud)

并设置所需的操作栏的颜色

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

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

ActionBar bar = getActionBar();
bar.setBackgroundDrawable(new ColorDrawable(Color.parseColor("#0000ff")));
Run Code Online (Sandbox Code Playgroud)

但这不适用于API <11,因此设置动作栏的xml方式仅适用于API <11


Cra*_*ind 19

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

getSupportActionBar().setBackgroundDrawable(
    new ColorDrawable(Color.parseColor("#5e9c00")));
Run Code Online (Sandbox Code Playgroud)

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

  • 最好使用资源来获取颜色,而不是将其作为文本。`getSupportActionBar().setBackgroundDrawable(new ColorDrawable(getResources().getColor(android.R.color.black)));` (2认同)

Joh*_*ger 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);
Run Code Online (Sandbox Code Playgroud)

(所有信用都归功于这篇文章,但它被隐藏在评论中,所以我想在这里表达一下) /sf/answers/1203906021/

  • 花了无数个小时试图找出WTH错了,这个答案对我有帮助. (2认同)

SAN*_*NAT 13

尝试一行代码:

getActionBar().setBackgroundDrawable(new ColorDrawable(getResources().getColor(R.color.MainColor)));
Run Code Online (Sandbox Code Playgroud)


Mer*_*n E 9

2021 年:Kotlin oneliner 不会弃用:

supportActionBar?.setBackgroundDrawable(ColorDrawable(ContextCompat.getColor(this,R.color.red)))
Run Code Online (Sandbox Code Playgroud)

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


And*_* me 7

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

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


Sid*_*ted 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);
    }
}
}
Run Code Online (Sandbox Code Playgroud)

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

    ActivityUtils.setActionBarColor(this, R.color.green_00c1c1);
Run Code Online (Sandbox Code Playgroud)


小智 5

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

ActionBar actionbar = getActionBar();
actionbar.setBackgroundDrawable(new ColorDrawable("color"));
Run Code Online (Sandbox Code Playgroud)

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

ActionBar actionbar = getSupportActionBar();
actionbar.setBackgroundDrawable(new ColorDrawable("color"));
Run Code Online (Sandbox Code Playgroud)