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?


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.


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

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

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


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


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



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


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


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

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>

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

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

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>


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


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>

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>


0

Use isso, funcionaria.

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

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


0

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

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

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

arquivo color.xml:

<resources> <color name="TabColor">#11FF00</color> </resources>`
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.