Come posso cambiare il colore di sfondo di ActionBar di ActionBarActivity usando XML?


277

Dettagli:

Sto estendendo ActionBarActivity.
Eclipse e SDK completamente aggiornati dal 2011-11-06.

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

Distribuito sul dispositivo Samsung con Android 2.3.3
Applicazione haandroid:theme="@android:style/Theme.Light"

Problema: l' applicazione è leggera, ma ActionBar è blu con icone grigie, appena visibile sullo sfondo blu. Voglio anche che ActionBar sia leggero, quindi le icone grigie sono più visibili.

Ho provato a modificare gli stili ma senza risultati.
Probabilmente mi manca qualcosa di banale.

Come posso cambiare il colore di sfondo di ActionBar di ActionBarActivity usando XML?


2
Chiudendo questa vecchia castagna. Indica Sannidhi, a grande richiesta, tuttavia le risposte a questa domanda coprono parecchie versioni di Android, e nel mio contesto il suggerimento di David Millers di usare SherlockActionBar era molto rilevante.
user77115

1
Piccolo bocconcino per gli altri: se si fa in modo che il primo elemento nella vista XML visualizzi lo stesso sfondo di ActionBar (nel nostro caso, bianco), ActionBar diventa grigio.
Joshua Pinter

Quando ci pensi, TitleBar e ActionBar non offrono nulla di speciale. Sono più come un fastidio, specialmente quando non li conosci. Un'alternativa migliore sarebbe nasconderli e progettare la tua barra del titolo. Puoi aggiungere i tuoi widget con Visualizzazioni e disegni. Poiché la barra del titolo non fornisce widget. E la barra delle azioni può avere solo un elenco a discesa, per tutti gli elementi del menu. Anche molte app hanno abbandonato la barra delle azioni in favore della propria.

Risposte:


523

Come da documentazione - "Puoi controllare i comportamenti e la visibilità della barra delle azioni con le API ActionBar, che sono state aggiunte in Android 3.0 (livello API 11)".

Pertanto, ActionBar non funzionerà per l'ambiente di destinazione che si trova al livello API 10 (Android 2.3.3).

Per ogni evenienza, se scegli come target il livello minimo di API 11, puoi cambiare il colore di sfondo di ActionBar definendo lo stile personalizzato, come:

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

E, imposta "MyTheme" come tema per applicazione / attività.


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

28
Lo stesso approccio dovrebbe essere utilizzato se si utilizza la libreria ActionBarCompat. L'unica differenza è che dovresti cambiare l' elemento actionBarStyle (senza Android: prefisso) per definire come apparirà la barra di azione sui dispositivi Android precedenti alla 3.0
Alex Semeniuk,

3
Esiste la possibilità, invece di inserire il codice HEX del colore, di fare riferimento a @android:colorun colore personalizzato o addirittura definito in esso colors.xml? L'ho provato senza successo.
jmrodrigg,

1
Non riesco a cambiare il colore del testo della barra delle azioni del testo usando "<item name =" android: textColor "> @ color / my_color </item>"
Shirish Herwade

2
Questo non ha funzionato per me con Android: tag background ma quando ho lasciato fuori il tag android e ho messo solo <item name = "background"> ​​il colore è cambiato per tutte le piattaforme.
Stevyhacker,

209

Prova questo

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 sai come posso ottenere una barra di azione contestuale?
Geeks On Hugs,

5
inoltre, la libreria di supporto in sé non ha ActionBar, per questo dovrai includere SherlockActionBar.
David Miler,

22
forse è strano ma nel mio caso bar.setBackgroundDrawable(new ColorDrawable(Color.BLUE));cambia il colore della barra delle azioni in grigio. Questi accade anche se messo altro colore, come Color.RED, Color.GREENe così via ... Qualcuno ha lo stesso problema, o sapere la causa di questo problema? Uso un dispositivo Nexus S
AlexAndro il

4
stackoverflow.com/a/17198657/1022454 Questo post sembra risolvere il problema in cui il colore della barra delle azioni diventa grigio.
Jonathon Fry,

124

prova questo:

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

1
Come si inserisce nel resto del codice? solo curioso di
sapere

7
Ho la domanda esatta come @JGallardo. Dove lo aggiungi? L'ho provato onCreatema ha dato un NullPointerException Edit: questo è il codice che ho aggiunto ad restoreActionBar ActionBar actionBar = getSupportActionBar (); actionBar.setBackgroundDrawable (new ColorDrawable (Color.parseColor ("# E5E4E2")));
rockydgeekgod,

Aggiungi il metodo onCreate della tua attività.
Ojonugwa Jude Ochalifu,

3
usa getSupportActionBar () instad di getActionBar ()
Chanaka Fernando,

69

Usa questo - http://jgilfelt.github.io/android-actionbarstylegenerator/

È uno strumento straordinario che ti consente di personalizzare la barra delle azioni con un'anteprima dal vivo.

Ho provato le risposte precedenti ma ho sempre avuto problemi con il cambio di altri colori come le schede e le lettere e ho passato ore a modificare le cose. Questo strumento mi ha aiutato a portare a termine il mio design in un paio di minuti.

Ecco uno screenshot dello strumento

Ti auguro il meglio! :)


come faccio a impostare la mia app per utilizzare i file una volta aggiunti alla mia app?
Mike,

Nel contesto dello screenshot sopra (chiamato esempio), dopo aver incollato la cartella res generata, dovresti avere un nuovo style @ style / Theme.Example. In AndroidManifest.xml, imposta <applicazione android: theme = "@ style / Theme.example">. Dovrebbe funzionare :)
Mohammad Shabaz Moosa,

1
deprecato. purtroppo
Liangjun il

55

Ho avuto lo stesso problema, quando la mia barra delle azioni diventava grigia quando ho inserito quel codice. È probabile che il tuo foglio di stile originale sia simile al seguente:

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

"DarkActionBar" era ciò che teneva grigia la tua barra delle azioni. L'ho cambiato in questo, e ha funzionato:

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

Ho anche spiegato come modificare il colore del testo. Inoltre, non è necessario modificare nulla che circonda le risorse.

-Warren


38

Il comportamento di Actionbar può anche essere modificato nelle API <11

Consulta la documentazione ufficiale di Android per riferimento

Sto creando un'app con minSdkVersion = "9"e targetSdkVersion = "21"ho cambiato il colore della barra delle azioni e funziona bene con il livello API 9

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

e imposta il colore della barra delle azioni che desideri

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>

Il colore della barra delle azioni può anche essere definito nel .classfile, lo snippet è

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

ma questo non funzionerà con l' API <11 , quindi lo stile della barra delle azioni xmlè solo per l'API <11



Lo snippet non funziona nella mia app quando viene utilizzato in un frammento. L'ho cambiato per ActionBar bar = getActivity (). GetActionBar (); . Non appena il frammento sta per essere aperto, si blocca.
Jose Manuel Abarca Rodríguez,

1
Trovato il problema, funziona con: ActionBar actionBar = getSupportActionBar ();
Jose Manuel Abarca Rodríguez,

20

Aggiungi direttamente questa riga con il tuo codice colore

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

non è necessario creare l'oggetto ActionBar ogni volta ...


1
Sarebbe meglio usare le risorse per ottenere il colore piuttosto che averlo come testo. getSupportActionBar().setBackgroundDrawable(new ColorDrawable(getResources().getColor(android.R.color.black)));
Dinesh

15

Sul Nexus 4 persone questo sembra rendere il colore grigio.

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

(tutto merito di questo post, ma è sepolto nei commenti, quindi volevo affiorarlo qui) https://stackoverflow.com/a/17198657/1022454


2
Dopo aver trascorso innumerevoli ore cercando di capire che WTH era sbagliato, questa risposta mi ha aiutato.
Abdullah Umer,

13

prova un codice di riga:

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

1
La mia app si arresta in modo anomalo con questa risposta. Per farlo funzionare in un frammento l'ho cambiato in questo modo: getActivity (). GetActionBar (). SetBackgroundDrawable (new ColorDrawable (getActivity (). GetResources (). GetColor (R.color.col_nar))); , ha anche provato getActivity (). getActionBar (). setBackgroundDrawable (new ColorDrawable (getResources (). getColor (R.color.col_nar))); . Si blocca non appena il frammento viene aperto.
Jose Manuel Abarca Rodríguez,

1
Trovato il problema, funziona con: ActionBar actionBar = getSupportActionBar ();
Jose Manuel Abarca Rodríguez,

1
la risposta è per l'attività. Se vuoi usarlo con un frammento, allora devi usare getActivity (). GetActionBar () per i frammenti
SANAT

7

Usa il codice qui sotto per fornire un colore diverso al testo della barra delle azioni e allo sfondo della barra delle azioni, basta usare il tema sottostante in manifest contro l'attività in cui vuoi l'output :)

<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

Ecco come puoi cambiare il colore della barra delle azioni.

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

Dal tuo MainActivity.java cambia il colore della barra delle azioni in questo modo

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

5

Quando si estende l'attività, utilizzare il seguente codice

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

Quando estendi AppCompatActivity usa il codice seguente

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

2

Questo codice può essere utile

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

Usa questo codice per cambiare il colore di sfondo della barra delle azioni. apri "res / valori / temi.xml" (se non presente, crealo) e aggiungi

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

Nota: questo codice funziona solo per Android 3.0 e versioni successive


1

Questo ha funzionato per me, per 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

È molto semplice per coloro che utilizzano API 21 o versioni successive Utilizzare questo codice di seguito

per 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

Usa questo, funzionerebbe.

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

0

A volte questa opzione genera NullPointerException

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

Ma questa opzione funziona per me. Quindi puoi provare questo.

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

Happy Coding


0

Se stai usando androidx AppCompact. Usa sotto il codice.

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

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

file color.xml:

<resources> <color name="TabColor">#11FF00</color> </resources>`
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.