Como definir a cor / estilo personalizado da ActionBar?

86

Estou usando Android Navigation barno meu projeto, quero mudar a cor superior da barra de ação para algo vermelho. Como posso fazer isso? Eu tenho algo assim,

top preto

e eu quero algo assim,

topo vermelho

como posso conseguir isso?

hemantsb
fonte

Respostas:

173

Você pode definir a cor da ActionBar (e outras coisas) criando um estilo personalizado :

Basta editar res / values ​​/ styles.xml arquivo do seu projeto Android.

Por exemplo, assim:

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

Em seguida, defina "MyCustomTheme" como o tema de sua atividade que contém a ActionBar.

Você também pode definir uma cor para a ActionBar como esta:

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

Retirado daqui: Como altero a cor de fundo da ActionBar de uma ActionBarActivity usando XML?

Philipp Jahoda
fonte
2
O que você quer dizer com "Então defina" MyCustomTheme "como o tema da sua atividade que contém a ActionBar." Como faço isso?
Kala J
2
Em seu XML de atividade, você deve adicionar android: theme = "@ style / MyCustomTheme" como um parâmetro dentro da tag <android.support.v4.view.ViewPager ... />
PedroD
2
e os arquivos styles.xml de valuesv14 e valuesv21 restantes no android
Harsha
Como alguém mudaria o título textStyle?
Adam Hurwitz
@KalaJ use setTheme(R.style.MyCustomTheme) no método onCreate de sua atividade.
NullByte08
57

Em geral, o sistema operacional Android aproveita um “tema” para permitir que os desenvolvedores de aplicativos apliquem globalmente um conjunto universal de parâmetros de estilo do elemento da IU aos aplicativos Android como um todo ou, alternativamente, a uma única subclasse de Activity.

Portanto, há três "temas de sistema" do sistema operacional Android principal, que você pode especificar em seu arquivo XML de manifesto do Android ao desenvolver aplicativos para a versão 3.0 e versões posteriores

Estou me referindo à biblioteca de suporte (APPCOMPAT) aqui: - Então, os três temas são 1. AppCompat Light Theme (Theme.AppCompat.Light)

insira a descrição da imagem aqui

  1. Tema escuro AppCompat (Theme.AppCompat),

insira a descrição da imagem aqui

  1. E um híbrido entre esses dois, AppCompat Light Theme com Darker ActionBar. (Theme.AppCompat.Light.DarkActionBar)

AndroidManifest.xml e veja a tag, o tema android é mencionado como: - android: theme = "@ style / AppTheme"

Abra o Styles.xml e temos o tema do aplicativo base declarado lá: -

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

Precisamos substituir esses elementos do tema pai para estilizar a barra de ação.

ActionBar com fundo de cor diferente: -

Para fazer isso, precisamos criar um novo estilo MyActionBar (você pode dar qualquer nome) com uma referência pai a @ style / Widget.AppCompat.Light.ActionBar.Solid.Inverse que contém as características de estilo para o elemento Android ActionBar UI. Portanto, a definição seria

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

E essa definição precisamos fazer referência em nosso AppTheme, apontando para o estilo da ActionBar substituído como -

@ style / MyActionBar ActionBar com fundo rosa

Altere a cor do texto da barra de título (por exemplo, preto para branco): -

Agora, para alterar a cor do texto do título, precisamos substituir a referência pai parent = "@ style / TextAppearance.AppCompat.Widget.ActionBar.Title">

Portanto, a definição de estilo seria

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

Faremos referência a essa definição de estilo dentro da definição de estilo MyActionBar , uma vez que a modificação TitleTextStyle é um elemento filho de um elemento de interface do usuário do SO pai da ActionBar. Portanto, a definição final do elemento de estilo MyActionBar será

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

ASSIM, este é o Styles.xml final

<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 com cor de título branca Para mais opções de estilo de menu da ActionBar, consulte este link

Nicks
fonte
2
Ei cara, funcionou. uma dúvida e se eu quiser mudar a cor do ícone de estouro do menu, ele muda a cor de acordo com o nosso tema, certo? ícone branco para tema escuro e ícone escuro para tema claro, como posso alterá-lo para branco? considere a última imagem em sua resposta.
Ameen Maheen
33

Apenas para Android 3.0 e superior

Ao oferecer suporte ao Android 3.0 e superior apenas, você pode definir o plano de fundo da barra de ação assim:

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>

Para Android 2.1 e superior

Ao usar a Biblioteca de Suporte, seu arquivo XML de estilo pode ter a seguinte aparência:

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

Em seguida, aplique seu tema a todo o seu aplicativo ou atividades individuais:

para mais detalhes Documentação

Ketan Ahir
fonte
Isso é estranho: você dá ao Android 3.0 e superior um estilo mais antigo (holo) do que 2.1 e superior (Material Design / Appcompat) ...
Roel
@DalvikVM Sim..Appcompat é para versões mais antigas. não há necessidade de usá-lo para versões superiores. No momento desta resposta, o design do material não foi instruído.
Ketan Ahir
Estou recebendo um erro: No resource found that matches the given name '@style/Widget.Holo.Light.ActionBar.Solid.Inverse'.alterá-lo para android:style/Widget.Holo.Light.ActionBar.Solid.Inverseresolve o problema. Obrigado.
Annie Lagang
@ style / Theme.AppCompat.Light.DarkActionBar não pode ser resolvido no meu caso (Android Studio) - não deveria ser @android: style / Theme.AppCompat.Light.DarkActionBar - ou seja, com um "android" antes do estilo?
AgentKnopf
32

Você pode alterar a cor da barra de ação desta forma:

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

Isso é tudo que você precisa para mudar a cor da barra de ação.

Além disso, se você quiser alterar a cor da barra de status, basta adicionar a linha:

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

Aqui está uma captura de tela tirada do site do desenvolvedor Android para torná-lo mais claro, e aqui está um link para ler mais sobre como personalizar a paleta de cores

insira a descrição da imagem aqui

Gjoko Bozinov
fonte
7

Outra possibilidade de fazer.

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

Levi Saturnino
fonte
4

Posso mudar a cor do texto da ActionBar usando titleTextColor

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

Cor customizada:

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

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

Estilo personalizado:

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

Para mais: Android ActionBar

Meia-lua
fonte
2

Como eu estava usando as AppCompatActivityrespostas acima, não funcionou para mim. Mas a solução abaixo funcionou:

Em 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: Eu usei em colorPrimaryvez deandroid:colorPrimary

zackygaurav
fonte
1

no style.xml adicione este código

<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>
Milaaaad
fonte
0

Use isto - http://jgilfelt.github.io/android-actionbarstylegenerator/

Boa ferramenta para personalizar sua barra de ação com uma visualização ao vivo em alguns minutos.

chanu
fonte
1
Embora este link possa responder à pergunta, é melhor incluir as partes essenciais da resposta aqui e fornecer o link para referência. As respostas somente com link podem se tornar inválidas se a página vinculada mudar.
Roman Marusyk