Como altero a cor de fundo do ActionBar de um ActionBarActivity usando XML?

277

Detalhes:

Estou estendendo o ActionBarActivity.
Eclipse e SDK totalmente corrigidos a partir de 06/11/2011.

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

Implantado no dispositivo Samsung com o
aplicativo Android 2.3.3android:theme="@android:style/Theme.Light"

Problema: o aplicativo é leve, mas o ActionBar é azul com ícones cinza, quase invisível na cor de fundo azul. Também quero que a ActionBar seja leve, para que seus ícones cinza fiquem mais visíveis.

Eu tentei modificar os estilos, mas sem sucesso.
Provavelmente estou perdendo algo trivial.

Como altero a cor de fundo do ActionBar de um ActionBarActivity usando XML?

user77115
fonte
2
Fechando essa velha castanha. Aponta para Sannidhi, pela demanda popular, no entanto, as respostas a esta pergunta abrangem várias versões do Android e, no meu contexto, a sugestão de David Millers de usar o SherlockActionBar foi mais relevante.
user77115
1
Pouco detalhe para outras pessoas: se você tornar o primeiro elemento em seu XML exibir o mesmo plano de fundo do seu ActionBar (no nosso caso, branco), o ActionBar ficará cinza.
Joshua Pinter
Quando você pensa sobre, TitleBar e ActionBar não oferecem nada de especial. Eles são mais como um incômodo, especialmente quando você não os conhece. Uma melhor alternativa seria escondê-los e criar sua própria barra de título. Você pode adicionar seus próprios widgets com Views e drawables. Como a barra de título não fornece widgets. E a barra de ação pode ter apenas uma lista suspensa, para todos os itens de menu. Mesmo muitos aplicativos abandonaram a barra de ação em favor de seus próprios.

Respostas:

523

Conforme a documentação - "Você pode controlar os comportamentos e a visibilidade da barra de ação com as APIs do ActionBar, que foram adicionadas no Android 3.0 (nível 11 da API)".

Portanto, o ActionBar não funcionará no seu ambiente de destino que está no nível 10 da API (Android 2.3.3).

Caso você tenha como meta o nível mínimo da API 11, poderá alterar a cor de fundo do ActionBar definindo o estilo personalizado, como:

<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 defina "MyTheme" como tema para aplicativo / atividade.

lupchiazoem
fonte
12
@AlexanderFragotsis use <item name="android:textColor">@color/my_color</item>.
Lethargicpanda
28
A mesma abordagem deve ser usada se você estiver usando a biblioteca ActionBarCompat. A única diferença é que você deve mudar actionBarStyle (sem android: prefixo) item para definir como ActionBar olhará em pré-3.0 dispositivos Android
Alex Semeniuk
3
Existe alguma possibilidade de, em vez de colocar o código HEX da cor, referenciar uma @android:colorou mesmo uma cor personalizada definida em colors.xml? Eu tentei sem sucesso.
21134 jmrodrigg
1
Eu não sou capaz de mudar o texto da barra de ação cor do texto usando "<item name =" android: textColor "> @ cor / my_color </ item>"
Shirish Herwade
2
Isso não funcionou para mim com a tag android: background, mas quando deixei de fora a tag android e coloquei apenas <item name = "background"> ​​a cor mudou para todas as plataformas.
Stevyhacker
209

Tente isto

ActionBar bar = getActionBar();
bar.setBackgroundDrawable(new ColorDrawable("COLOR"));
coder_For_Life22
fonte
1
Outubro 11-6: 53: 16,985: E / AndroidRuntime (16956): java.lang.NoSuchMethodError: com.acme.myActivity.getActionBar
user77115
1
@ coder_For_Life22 você sabe como posso obter uma barra de ação contextual?
Geeks On Hugs
5
Além disso, a biblioteca de suporte em si não possui o ActionBar, pois você precisará incluir o SherlockActionBar.
precisa
22
talvez isso seja estranho, mas, no meu caso, bar.setBackgroundDrawable(new ColorDrawable(Color.BLUE));altere a cor da barra de ação para cinza. Estes acontece também se colocar outra cor, como Color.RED, Color.GREENe assim por diante ... Alguém tem o mesmo problema, ou saber a causa deste problema? Eu uso um dispositivo Nexus S
AlexAndro 16/10
4
stackoverflow.com/a/17198657/1022454 Esta postagem parece corrigir o problema em que a cor da barra de ação fica cinza.
precisa saber é o seguinte
124

tente isto:

ActionBar bar = getActionBar();
bar.setBackgroundDrawable(new ColorDrawable(Color.parseColor("#0000ff")));
user2428604
fonte
1
Como isso se encaixa no restante do código? apenas curioso para onde realmente adicionar este
JGallardo
7
Eu tenho a pergunta exata como @JGallardo. Onde você adiciona isso? Eu tentei, onCreatemas deu um NullPointerException Edit: Este é o código que eu adicionei ao restoreActionBar ActionBar actionBar = getSupportActionBar (); actionBar.setBackgroundDrawable (new ColorDrawable (Color.parseColor ("# E5E4E2")));
rockydgeekgod
Adicione o método onCreate da sua atividade.
Ojonugwa Jude Ochalifu
3
use getSupportActionBar () instad de getActionBar ()
Chanaka Fernando
69

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

É uma ferramenta incrível que permite personalizar sua barra de ação com uma visualização ao vivo.

Tentei as respostas anteriores, mas sempre tive problemas com a alteração de outras cores, como abas e letras, e passava horas ajustando coisas. Essa ferramenta me ajudou a concluir meu design em apenas alguns minutos.

Aqui está uma captura de tela da ferramenta

Muito bem sucedida! :)

Mohammad Shabaz Moosa
fonte
como faço para definir meu aplicativo para usar os arquivos depois que eles são adicionados ao meu aplicativo?
1616 Mike
No contexto da captura de tela acima (exemplo nomeado), após colar a pasta res gerada, você deve ter um novo estilo @ style / Theme.Example. No AndroidManifest.xml, defina <application android: theme = "@ style / Theme.example">. Deve funcionar :)
Mohammad Shabaz Moosa
1
descontinuada. infelizmente
Liangjun 23/12/2015
55

Eu tive o mesmo problema, onde minha barra de ação ficava cinza quando eu inseria esse código. As chances são de que sua folha de estilos original tenha a seguinte aparência:

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

O "DarkActionBar" era o que mantinha sua barra de ação cinza. Eu mudei para isso e funcionou:

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

Também joguei como editar a cor do texto. Além disso, não há necessidade de alterar nada ao redor dos recursos.

-Warren

Warren
fonte
38

O comportamento da Actionbar também pode ser alterado nas APIs <11

Consulte a documentação oficial do Android para obter referência

Estou criando um aplicativo minSdkVersion = "9"e targetSdkVersion = "21"alterei a cor da barra de ação e funciona bem com o nível 9 da API

Aqui está um 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 defina a cor da barra de ação que você deseja

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>

A cor da barra de ação também pode ser definida no .classarquivo, o snippet é

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

mas isso não funcionará com a API <11 , portanto, estilizar a barra de ação xmlé apenas uma maneira para a API <11

Apurva
fonte
O snippet não funciona no meu aplicativo quando usado em um fragmento. Eu mudei para ActionBar bar = getActivity (). GetActionBar (); . Assim que o fragmento está prestes a ser aberto, ele trava.
Jose Manuel Abarca Rodríguez
1
Encontrado o problema, ele trabalha com: ActionBar actionBar = getSupportActionBar ();
Jose Manuel Abarca Rodríguez
20

Adicione diretamente esta linha ao seu código de cores

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

não precisa criar o objeto ActionBar sempre ...

Mente louca
fonte
1
Seria melhor usar recursos para obter a cor, em vez de tê-la como texto. getSupportActionBar().setBackgroundDrawable(new ColorDrawable(getResources().getColor(android.R.color.black)));
Dinesh
15

Nas pessoas do Nexus 4, isso parece tornar a cor cinza.

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

(todo o crédito para este post, mas ele está enterrado nos comentários, então eu queria mostrá-lo aqui) https://stackoverflow.com/a/17198657/1022454

John Ballinger
fonte
2
Depois de passar inúmeras horas tentando descobrir que o WTH estava errado, essa resposta me ajudou.
Abdullah Umer
13

tente um código de linha:

getActionBar().setBackgroundDrawable(new ColorDrawable(getResources().getColor(R.color.MainColor)));
SANAT
fonte
1
Meu aplicativo trava com esta resposta. Para fazê-lo funcionar em um fragmento, mudei-o assim: getActivity (). GetActionBar (). SetBackgroundDrawable (new ColorDrawable (getActivity (). GetResources (). GetColor (R.color.col_nar))); , também tentei getActivity (). getActionBar (). setBackgroundDrawable (new ColorDrawable (getResources (). getColor (R.color.col_nar))); . Ele trava assim que o fragmento é aberto.
Jose Manuel Abarca Rodríguez
1
Encontrado o problema, ele trabalha com: ActionBar actionBar = getSupportActionBar ();
Jose Manuel Abarca Rodríguez
1
a resposta é para a atividade. Se você quiser usá-lo com o fragmento, então você tem que usar getActivity () getActionBar () para fragmentos.
SANAT
7

Use o código abaixo para fornecer cores diferentes ao texto da barra de ação e ao plano de fundo da barra de ação, use o tema abaixo no manifesto em relação à atividade na qual você deseja saída :)

<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>
Android é tudo para mim
fonte
5

É assim que você pode alterar a cor da barra de ação.

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

No MainActivity.java, altere a cor da barra de ação como esta

    ActivityUtils.setActionBarColor(this, R.color.green_00c1c1);
Siddarth Kanted
fonte
5

Quando você estiver estendendo atividade, use o seguinte código

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

Quando você estiver estendendo AppCompatActivity, use o seguinte código

ActionBar actionbar = getSupportActionBar();
actionbar.setBackgroundDrawable(new ColorDrawable("color"));
arlo shie
fonte
2

Esse código pode ser útil

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

Qutbuddin Bohra
fonte
1

Use Este código ..para alterar a cor de fundo da barra de ação. abra "res / values ​​/ themes.xml" (se não estiver presente, crie-o) e adicione

<?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: este código funciona apenas para o Android 3.0 e versões superiores

Amey Bawiskar
fonte
1

Isso funcionou para mim, para 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>
Tejasvi Hegde
fonte
1

É muito simples para quem está usando a API 21 ou superior. Use este código abaixo

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

nirazverma
fonte
0

Use isso, funcionaria.

ActionBar actionbar = getActionBar();
actionbar.setBackgroundDrawable(new ColorDrawable("color"));
Pankaj Lilan
fonte
0

Às vezes, esta opção lança NullPointerException

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

Mas esta opção é trabalhada para mim. Então você pode tentar isso.

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

Happy Coding

Shahadat Hossain
fonte
0

Se você estiver usando o androidx AppCompact. Use o código abaixo.

androidx.appcompat.app.ActionBar actionBar = getSupportActionBar();
actionBar.setBackgroundDrawable(new ColorDrawable("Color"));
DINITH RUKSHAN KUMARA
fonte
-2
getActionBar().setBackgroundDrawable(new ColorDrawable(getResources().getColor(R.color.TabColor)));

arquivo color.xml:

<resources> <color name="TabColor">#11FF00</color> </resources>`
Chandresh
fonte