Come impostare il colore / stile ActionBar personalizzato?


87

Sto usando Android Navigation barnel mio progetto, voglio cambiare il colore superiore nella barra delle azioni in qualcosa di rosso, come posso farlo? Ho qualcosa di simile

nero superiore

e voglio qualcosa di simile

rosso in alto

come posso ottenerlo?

Risposte:


174

Puoi definire il colore della ActionBar (e altre cose) creando uno stile personalizzato :

Modifica semplicemente il file res / values ​​/ styles.xml del tuo progetto Android.

Ad esempio in questo modo:

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

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

Quindi imposta "MyCustomTheme" come tema della tua attività che contiene la ActionBar.

Puoi anche impostare un colore per la ActionBar in questo modo:

ActionBar actionBar = getActionBar();
actionBar.setBackgroundDrawable(new ColorDrawable(Color.RED)); // set your desired color

Tratto da qui: come si cambia il colore di sfondo della ActionBar di una ActionBarActivity utilizzando XML?


2
Cosa intendi per "Quindi imposta" MyCustomTheme "come tema della tua attività che contiene la ActionBar." Come lo faccio?
Kala J

2
Nell'XML dell'attività devi aggiungere android: theme = "@ style / MyCustomTheme" come parametro all'interno del tag <android.support.v4.view.ViewPager ... />
PedroD

2
che dire dei file styles.xml di valuesv14 e valuesv21 rimanenti in Android
Harsha

Come si cambierà il titolo textStyle?
Adam Hurwitz

@KalaJ usa setTheme(R.style.MyCustomTheme) nel metodo onCreate della tua attività.
NullByte08

57

In generale, il sistema operativo Android utilizza un "tema" per consentire agli sviluppatori di app di applicare globalmente un set universale di parametri di stile degli elementi dell'interfaccia utente alle applicazioni Android nel loro complesso o, in alternativa, a una singola sottoclasse di attività.

Quindi ci sono tre principali "temi di sistema" del sistema operativo Android, che puoi specificare nel tuo file XML manifest di Android quando sviluppi app per la versione 3.0 e successive

Mi riferisco alla libreria di supporto (APPCOMPAT) qui: - Quindi i tre temi sono 1. AppCompat Light Theme (Theme.AppCompat.Light)

inserisci qui la descrizione dell'immagine

  1. AppCompat Dark Theme (Theme.AppCompat),

inserisci qui la descrizione dell'immagine

  1. E un ibrido tra questi due, AppCompat Light Theme con Darker ActionBar. (Theme.AppCompat.Light.DarkActionBar)

AndroidManifest.xml e guarda il tag, il tema Android è menzionato come: - android: theme = "@ style / AppTheme"

Apri Styles.xml e abbiamo il tema dell'applicazione di base dichiarato lì: -

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
  </style>

Dobbiamo sovrascrivere questi elementi del tema principale per definire lo stile della barra delle azioni.

ActionBar con sfondo di colore diverso: -

Per fare ciò dobbiamo creare un nuovo stile MyActionBar (puoi dare qualsiasi nome) con un riferimento genitore a @ style / Widget.AppCompat.Light.ActionBar.Solid.Inverse che contiene le caratteristiche di stile per l'elemento Android ActionBar UI. Quindi la definizione sarebbe

<style name="MyActionBar" parent="@style/Widget.AppCompat.Light.ActionBar.Solid.Inverse">
    <item name="background">@color/red</item>
</style>

E questa definizione dobbiamo fare riferimento nel nostro AppTheme, indicando lo stile ActionBar sovrascritto come ...

@ style / MyActionBar ActionBar con colore di sfondo rosa

Modificare il colore del testo della barra del titolo (ad es. Da nero a bianco): -

Ora per cambiare il colore del testo del titolo, dobbiamo sovrascrivere il riferimento principale parent = "@ style / TextAppearance.AppCompat.Widget.ActionBar.Title">

Quindi la definizione dello stile sarebbe

<style name="MyActionBarTitle" parent="@style/TextAppearance.AppCompat.Widget.ActionBar.Title">
    <item name="android:textColor">@color/white</item>
</style>

Faremo riferimento a questa definizione di stile all'interno della definizione di stile MyActionBar , poiché la modifica TitleTextStyle è un elemento figlio di un elemento dell'interfaccia utente del sistema operativo padre di ActionBar. Quindi la definizione finale dell'elemento di stile MyActionBar sarà

<style name="MyActionBar" parent="@style/Widget.AppCompat.Light.ActionBar.Solid.Inverse">
    <item name="background">@color/red</item>
    <item name="titleTextStyle">@style/MyActionBarTitle</item>
</style>

Quindi questo è il file Styles.xml finale

<resources>
    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light">
        <!-- This is the styling for action bar -->
        <item name="actionBarStyle">@style/MyActionBar</item>
    </style>

    <style name="MyActionBar" parent="@style/Widget.AppCompat.Light.ActionBar.Solid.Inverse">
        <item name="background">@color/red</item>
        <item name="titleTextStyle">@style/MyActionBarTitle</item>
    </style>

    <style name="MyActionBarTitle" parent="@style/TextAppearance.AppCompat.Widget.ActionBar.Title">
        <item name="android:textColor">@color/white</item>
    </style>
</resources>

ActionBar Con il colore del titolo bianco Per ulteriori opzioni di ActionBar Stile del menu, fare riferimento a questo collegamento


2
hey amico ha funzionato. un dubbio cosa succede se voglio cambiare il colore dell'icona di overflow del menu, cambia il colore in base al nostro tema, giusto?. icona bianca per tema scuro e icona scura per tema chiaro, come posso cambiarla in bianco? considera l'ultima immagine nella tua risposta.
Ameen Maheen

33

Solo per Android 3.0 e versioni successive

Quando si supporta solo Android 3.0 e versioni successive, è possibile definire lo sfondo della barra delle azioni in questo modo:

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.Holo.Light.DarkActionBar">
       <item name="android:actionBarStyle">@style/MyActionBar</item>
    </style>

<!-- ActionBar styles -->
  <style name="MyActionBar" parent="@style/Widget.Holo.Light.ActionBar.Solid.Inverse">
       <item name="android:background">#ff0000</item>
  </style>
</resources>

Per Android 2.1 e versioni successive

Quando si utilizza la libreria di supporto, il file XML di stile potrebbe essere simile a questo:

<?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">@drawable/actionbar_background</item>

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

Quindi applica il tuo tema all'intera app o alle singole attività:

per maggiori dettagli Documentaion


Questo è strano: dai ad Android 3.0 e versioni successive uno stile precedente (olo) rispetto a 2.1 e versioni successive (Material Design / Appcompat) ...
Roel

@DalvikVM Sì .. Appcompat è per le versioni precedenti. non c'è bisogno di usarlo per versioni superiori. Al momento di questa risposta, il design del materiale non era stato introdotto.
Ketan Ahir

Ricevo un errore: No resource found that matches the given name '@style/Widget.Holo.Light.ActionBar.Solid.Inverse'.modificarlo in android:style/Widget.Holo.Light.ActionBar.Solid.Inverserisolve il problema. Grazie.
Annie Lagang

@ style / Theme.AppCompat.Light.DarkActionBar non può essere risolto nel mio caso (Android Studio) - non dovrebbe essere @android: style / Theme.AppCompat.Light.DarkActionBar - cioè con un "android" anteposto prima dello stile?
AgentKnopf

32

Puoi cambiare il colore della barra delle azioni in questo modo:

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="colorPrimary">@color/green_action_bar</item>
</style>

Questo è tutto ciò di cui hai bisogno per cambiare il colore della barra delle azioni.

Inoltre, se vuoi cambiare il colore della barra di stato, aggiungi la linea:

 <item name="android:colorPrimaryDark">@color/green_dark_action_bar</item>

Ecco uno screenshot tratto dal sito Android dello sviluppatore per renderlo più chiaro, ed ecco un link per saperne di più sulla personalizzazione della tavolozza dei colori

inserisci qui la descrizione dell'immagine


7

Un'altra possibilità di fare.

actionBar.setBackgroundDrawable (new ColorDrawable (Color.parseColor ("# 0000ff")));


5

Posso cambiare il colore del testo di ActionBar usando titleTextColor

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="titleTextColor">#333333</item>
</style>

3

Colore personalizzato:

 <style name="AppTheme" parent="Theme.AppCompat.Light">

                <item name="colorPrimary">@color/ColorPrimary</item>
                <item name="colorPrimaryDark">@color/ColorPrimaryDark</item>
                <!-- Customize your theme here. -->
     </style>

Stile personalizzato:

 <style name="Theme.AndroidDevelopers" parent="android:style/Theme.Holo.Light">
        <item name="android:selectableItemBackground">@drawable/ad_selectable_background</item>
        <item name="android:popupMenuStyle">@style/MyPopupMenu</item>
        <item name="android:dropDownListViewStyle">@style/MyDropDownListView</item>
        <item name="android:actionBarTabStyle">@style/MyActionBarTabStyle</item>
        <item name="android:actionDropDownStyle">@style/MyDropDownNav</item>
        <item name="android:listChoiceIndicatorMultiple">@drawable/ad_btn_check_holo_light</item>
        <item name="android:listChoiceIndicatorSingle">@drawable/ad_btn_radio_holo_light</item>
    </style>

Per di più: Android ActionBar


2

Come stavo usando AppCompatActivity risposte sopra non ha funzionato per me. Ma la soluzione seguente ha funzionato:

In res / styles.xml

<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
</style>


PS: ho usato colorPrimaryinvece diandroid:colorPrimary


1

in style.xml aggiungi questo codice

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

    <style name="MyActionBarTheme" parent="@android:style/Widget.Holo.Light.ActionBar">
        <item name="android:background">#333333</item>
    </style>
</resources>

0

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

Ottimo strumento per personalizzare la barra delle azioni con un'anteprima dal vivo in un paio di minuti.


1
Sebbene questo collegamento possa rispondere alla domanda, è meglio includere le parti essenziali della risposta qui e fornire il collegamento come riferimento. Le risposte di solo collegamento possono diventare non valide se la pagina collegata cambia.
Roman Marusyk
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.