Wie ändere ich die Hintergrundfarbe der ActionBar einer ActionBarActivity mithilfe von XML?


277

Einzelheiten:

Ich erweitere ActionBarActivity.
Eclipse und SDK wurden am 06.11.2011 vollständig gepatcht.

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

Bereitgestellt auf Samsung-Gerät mit Android 2.3.3
Anwendung hatandroid:theme="@android:style/Theme.Light"

Problem : Die Anwendung ist hell, aber ActionBar ist blau mit grauen Symbolen, die vor der blauen Hintergrundfarbe kaum sichtbar sind. Ich möchte auch, dass die ActionBar hell ist, damit die grauen Symbole besser sichtbar sind.

Ich habe versucht, die Stile zu ändern, aber ohne Erfolg.
Mir fehlt wahrscheinlich etwas Triviales.

Wie ändere ich die Hintergrundfarbe der ActionBar einer ActionBarActivity mithilfe von XML?


2
Diese alte Kastanie schließen. Weist auf vielfachen Wunsch auf Sannidhi hin, jedoch umfassen die Antworten auf diese Frage einige Versionen von Android, und in meinem Kontext war der Vorschlag von David Millers, SherlockActionBar zu verwenden, am relevantesten.
user77115

1
Kleiner Leckerbissen für andere: Wenn Sie das erste Element in Ihrer XML-Ansicht auf den gleichen Hintergrund wie Ihre ActionBar (in unserem Fall weiß) einstellen, wird die ActionBar grau.
Joshua Pinter

Wenn Sie darüber nachdenken, bieten TitleBar und ActionBar nichts Besonderes. Sie sind eher ein Ärgernis, besonders wenn Sie sie nicht kennen. Eine bessere Alternative wäre, sie auszublenden und eine eigene Titelleiste zu entwerfen. Sie können Ihre eigenen Widgets mit Ansichten und Zeichnungen hinzufügen. Als Titelleiste werden keine Widgets bereitgestellt. Und die Aktionsleiste kann nur eine Dropdown-Liste für alle Menüelemente enthalten. Selbst viele Apps haben die Aktionsleiste zugunsten ihrer eigenen abgelehnt.

Antworten:


523

Wie pro Dokumentation - „können Sie das Verhalten steuern und die Sichtbarkeit der Aktionsleiste mit der ActionBar APIs, die in Android 3.0 (API - Ebene 11) hinzugefügt wurden.“

Daher funktioniert ActionBar nicht für Ihre Zielumgebung auf API-Ebene 10 (Android 2.3.3).

Nur für den Fall, dass Sie eine Mindest-API-Stufe 11 anstreben, können Sie die Hintergrundfarbe von ActionBar ändern, indem Sie einen benutzerdefinierten Stil wie folgt definieren:

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

Stellen Sie "MyTheme" als Thema für die Anwendung / Aktivität ein.


12
@AlexanderFragotsis verwenden <item name="android:textColor">@color/my_color</item>.
Lethargicpanda

28
Der gleiche Ansatz sollte verwendet werden, wenn Sie die ActionBarCompat-Bibliothek verwenden. Der einzige Unterschied besteht darin, dass Sie das Element actionBarStyle (ohne Android: Präfix) ändern sollten, um zu definieren, wie die Aktionsleiste auf Android-Geräten vor 3.0 aussehen soll
Alex Semeniuk

3
Gibt es eine Möglichkeit, anstelle des HEX-Codes der Farbe auf eine @android:coloroder sogar eine benutzerdefinierte Farbe zu verweisen, die in definiert ist colors.xml? Ich habe es ohne Erfolg versucht.
jmrodrigg


2
Dies funktionierte bei mir mit android: background tag nicht, aber als ich das android tag wegließ und nur <item name = "background"> ​​einfügte, änderte sich die Farbe für alle Plattformen.
Stevyhacker

209

Versuche dies

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

1
@ coder_For_Life22 wissen Sie, wie ich eine kontextbezogene Aktionsleiste erhalten kann?
Geeks On Hugs

5
afaik, die Support-Bibliothek selbst hat keine ActionBar, dafür müssen Sie die SherlockActionBar einbinden.
David Miler

22
Vielleicht ist das seltsam, aber in meinem Fall bar.setBackgroundDrawable(new ColorDrawable(Color.BLUE));ändern Sie die Farbe der Aktionsleiste in Grau. Dies geschieht auch , wenn setzen andere Farbe, wie Color.RED, Color.GREENund so weiter ... Hat jemand das gleiche Problem haben oder kennen die Ursache für dieses Problem? Ich benutze ein Nexus S-Gerät
AlexAndro

4
stackoverflow.com/a/17198657/1022454 Dieser Beitrag scheint das Problem zu beheben, bei dem die Farbe der Aktionsleiste grau wird.
Jonathon Fry

124

Versuche dies:

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

1
Wie passt das in den Rest des Codes? nur neugierig, wo man das tatsächlich hinzufügt
JGallardo

7
Ich habe die genaue Frage als @JGallardo. Wo fügst du das hinzu? Ich habe es versucht, onCreateaber es gab eine NullPointerException Bearbeitung: Dies ist der Code, den ich zu restoreActionBar ActionBar hinzugefügt habe actionBar = getSupportActionBar (); actionBar.setBackgroundDrawable (neues ColorDrawable (Color.parseColor ("# E5E4E2")));
Rockydgeekgod

Fügen Sie die onCreate-Methode Ihrer Aktivität hinzu.
Ojonugwa Jude Ochalifu

3
Verwenden Sie getSupportActionBar () anstelle von getActionBar ()
Chanaka Fernando

69

Verwenden Sie dies - http://jgilfelt.github.io/android-actionbarstylegenerator/

Es ist ein erstaunliches Tool, mit dem Sie Ihre Aktionsleiste mit einer Live-Vorschau anpassen können.

Ich habe die früheren Antworten ausprobiert, hatte aber immer Probleme, andere Farben wie Tabulatoren und Buchstaben zu ändern, und habe Stunden damit verbracht, Dinge zu optimieren. Mit diesem Tool konnte ich mein Design in nur wenigen Minuten fertigstellen.

Hier ist ein Screenshot des Tools

Alles Gute! :) :)


Wie stelle ich meine App so ein, dass sie die Dateien verwendet, sobald sie meiner App hinzugefügt wurden?
Mike

Im Kontext des obigen Screenshots (benanntes Beispiel) sollten Sie nach dem Einfügen des generierten res-Ordners einen neuen style @ style / Theme.Example haben. Legen Sie in AndroidManifest.xml <application android: theme = "@ style / Theme.example"> fest. Sollte funktionieren :)
Mohammad Shabaz Moosa

1
veraltet. leider
Liangjun

55

Ich hatte das gleiche Problem, bei dem meine Aktionsleiste grau wurde, wenn ich diesen Code eingab. Wahrscheinlich sah Ihr ursprüngliches Stylesheet folgendermaßen aus:

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

Die "DarkActionBar" hat Ihre Action Bar grau gehalten. Ich habe es dahingehend geändert und es hat funktioniert:

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

Ich warf auch ein, wie man die Textfarbe bearbeitet. Außerdem müssen Sie nichts an den Ressourcen ändern.

-Labyrinth


38

Das Verhalten der Aktionsleiste kann auch in APIs <11 geändert werden

Sehen Sie sich die Android Offizielle Dokumentation Referenz

Ich erstelle eine App mit minSdkVersion = "9"und targetSdkVersion = "21"habe die Farbe der Aktionsleiste geändert. Sie funktioniert einwandfrei mit API Level 9

Hier ist eine 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>

und legen Sie die Farbe der gewünschten Aktionsleiste fest

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>

Die Farbe der Aktionsleiste kann auch in einer .classDatei definiert werden, das Snippet ist

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

Dies funktioniert jedoch nicht mit der API <11 , sodass das Stylen der Aktionsleiste xmlnur für API <11 möglich ist



Das Snippet funktioniert in meiner App nicht, wenn es in einem Fragment verwendet wird. Ich habe es für ActionBar geändert bar = getActivity (). GetActionBar (); . Sobald das Fragment geöffnet werden soll, stürzt es ab.
Jose Manuel Abarca Rodríguez

1
Das Problem wurde gefunden und funktioniert mit: ActionBar actionBar = getSupportActionBar ();
Jose Manuel Abarca Rodríguez

20

Fügen Sie diese Zeile direkt mit Ihrem Farbcode hinzu

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

Sie müssen nicht jedes Mal ein ActionBar-Objekt erstellen ...


1
Es wäre besser, Ressourcen zu verwenden, um die Farbe zu erhalten, als sie als Text zu haben. getSupportActionBar().setBackgroundDrawable(new ColorDrawable(getResources().getColor(android.R.color.black)));
Dinesh

15

Beim Nexus 4 scheint die Farbe dadurch grau zu werden.

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

(Alle Ehre gebührt diesem Beitrag, aber er ist in den Kommentaren vergraben, deshalb wollte ich ihn hier auftauchen lassen ) https://stackoverflow.com/a/17198657/1022454


2
Nachdem ich unzählige Stunden damit verbracht hatte, herauszufinden, ob WTH falsch war, half mir diese Antwort.
Abdullah Umer

13

Versuchen Sie es mit einem Zeilencode:

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

1
Meine App stürzt mit dieser Antwort ab. Damit es in einem Fragment funktioniert, habe ich es folgendermaßen geändert: getActivity (). GetActionBar (). SetBackgroundDrawable (neues ColorDrawable (getActivity (). GetResources (). GetColor (R.color.col_nar)); habe auch versucht, getActivity (). getActionBar (). setBackgroundDrawable (neues ColorDrawable (getResources (). getColor (R.color.col_nar))); . Es stürzt ab, sobald das Fragment geöffnet wird.
Jose Manuel Abarca Rodríguez

1
Das Problem wurde gefunden und funktioniert mit: ActionBar actionBar = getSupportActionBar ();
Jose Manuel Abarca Rodríguez

1
Die Antwort ist für die Aktivität. Wenn Sie es mit Fragment verwenden möchten, müssen Sie getActivity (). GetActionBar () für Fragmente verwenden
SANAT

7

Verwenden Sie den folgenden Code, um dem Text der Aktionsleiste und dem Hintergrund der Aktionsleiste eine andere Farbe zu verleihen. Verwenden Sie einfach das folgende Thema im Manifest für die Aktivität, in der Sie ausgeben möchten :)

<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

So können Sie die Farbe der Aktionsleiste ändern.

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

Ändern Sie in Ihrer MainActivity.java die Farbe der Aktionsleiste wie folgt

    ActivityUtils.setActionBarColor(this, R.color.green_00c1c1);

5

Wenn Sie die Aktivität erweitern, verwenden Sie den folgenden Code

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

Wenn Sie AppCompatActivity erweitern, verwenden Sie den folgenden Code

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

2

Dieser Code kann hilfreich sein

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

Verwenden Sie diesen Code, um die Hintergrundfarbe der Aktionsleiste zu ändern. Öffnen Sie "res / values ​​/ theme.xml" (falls nicht vorhanden, erstellen Sie es) und fügen Sie hinzu

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

Hinweis: Dieser Code funktioniert nur für Android 3.0 und höhere Versionen


1

Dies funktionierte für mich, für 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

Es ist sehr einfach für diejenigen, die API 21 oder höher verwenden. Verwenden Sie diesen Code unten

für 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

Verwenden Sie dies, es würde funktionieren.

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

0

Manchmal löst diese Option eine NullPointerException aus

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

Aber diese Option funktioniert für mich. Sie können dies also versuchen.

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

Viel Spaß beim Codieren


0

Wenn Sie Androidx AppCompact verwenden. Verwenden Sie den folgenden Code.

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

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

color.xml Datei:

<resources> <color name="TabColor">#11FF00</color> </resources>`
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.