¿Cómo cambio el color de fondo de ActionBar de un ActionBarActivity usando XML?

277

Detalles:

Estoy extendiendo ActionBarActivity.
Eclipse y SDK completamente parcheados desde 2011-11-06.

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

Implementado en un dispositivo Samsung con Android 2.3.3 La
aplicación tieneandroid:theme="@android:style/Theme.Light"

Problema: la aplicación es ligera, pero ActionBar es azul con iconos grises, apenas visibles contra el color de fondo azul. También quiero que la Barra de acciones sea ligera, para que los iconos grises sean más visibles.

He intentado modificar los estilos pero fue en vano.
Probablemente me estoy perdiendo algo trivial.

¿Cómo cambio el color de fondo de ActionBar de un ActionBarActivity usando XML?

usuario77115
fuente
2
Cerrando este viejo castaño. Señala a Sannidhi, por demanda popular, sin embargo, las respuestas a esta pregunta abarcan bastantes versiones de Android, y en mi contexto, la sugerencia de David Millers de usar SherlockActionBar fue la más relevante.
user77115
1
Pequeño dato para los demás: si hace que el primer elemento de su vista XML tenga el mismo fondo que su ActionBar (en nuestro caso, blanco), la ActionBar se vuelve gris.
Joshua Pinter el
Cuando lo piensas, TitleBar y ActionBar no ofrecen nada especial. Son más como una molestia, especialmente cuando no los conoce. Una mejor alternativa sería ocultarlos y diseñar su propia barra de título. Puede agregar sus propios widgets con Vistas y elementos dibujables. Como barra de título no proporciona widgets. Y la barra de acción solo puede tener una lista desplegable, para todos los elementos de menú. Incluso muchas aplicaciones han abandonado la barra de acción en favor de la suya.

Respuestas:

523

Según la documentación : "Puede controlar los comportamientos y la visibilidad de la barra de acción con las API de ActionBar, que se agregaron en Android 3.0 (API nivel 11)".

Por lo tanto, ActionBar no funcionará para su entorno de destino que está en el nivel API 10 (Android 2.3.3).

Por si acaso, si apunta al nivel mínimo de API 11, puede cambiar el color de fondo de ActionBar definiendo un 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>

Y configure "MyTheme" como tema para la aplicación / actividad.

lupchiazoem
fuente
12
@AlexanderFragotsis uso <item name="android:textColor">@color/my_color</item>.
lethargicpanda
28
Se debe utilizar el mismo enfoque si está utilizando la biblioteca ActionBarCompat. La única diferencia es que debe cambiar el elemento actionBarStyle (sin Android: prefijo) para definir cómo se verá la barra de acción en los dispositivos Android anteriores a 3.0
Alex Semeniuk
3
¿Hay alguna posibilidad de, en lugar de poner el código HEX del color, hacer referencia @android:colora un color personalizado o incluso definido en él colors.xml? Lo he intentado sin éxito.
jmrodrigg
1
No puedo cambiar el color del texto de la barra de acción de texto con "<item name =" android: textColor "> @ color / my_color </item>"
Shirish Herwade
2
Esto no funcionó para mí con Android: etiqueta de fondo, pero cuando omití la etiqueta de Android y puse solo <item name = "background"> ​​el color cambió para todas las plataformas.
stevyhacker
209

Prueba esto

ActionBar bar = getActionBar();
bar.setBackgroundDrawable(new ColorDrawable("COLOR"));
coder_For_Life22
fuente
1
11-06 10: 53: 16.985: E / AndroidRuntime (16956): java.lang.NoSuchMethodError: com.acme.myActivity.getActionBar
user77115
1
@ coder_For_Life22, ¿sabes cómo puedo obtener una barra de acción contextual?
Geeks On Hugs
55
afaik, la biblioteca de soporte en sí misma no tiene ActionBar, para eso tendrás que incluir SherlockActionBar.
David Miler
22
Tal vez esto sea extraño, pero en mi caso bar.setBackgroundDrawable(new ColorDrawable(Color.BLUE));cambie el color de la barra de acción a gris. Esto sucede también si pone otro color, como Color.RED, Color.GREENetc. ... ¿Alguien tiene el mismo problema o conoce la causa de este problema? Yo uso un dispositivo Nexus S
AlexAndro
44
stackoverflow.com/a/17198657/1022454 Esta publicación parece solucionar el problema donde el color de la barra de acción se vuelve gris.
Jonathon Fry
124

prueba esto:

ActionBar bar = getActionBar();
bar.setBackgroundDrawable(new ColorDrawable(Color.parseColor("#0000ff")));
usuario2428604
fuente
1
¿Cómo encaja esto en el resto del código? es curioso dónde agregar esto realmente
JGallardo 03 de
77
Tengo la pregunta exacta como @JGallardo. ¿Dónde agregas esto? Lo probé onCreatepero dio una NullPointerException Edición: este es el código que agregué a restoreActionBar ActionBar actionBar = getSupportActionBar (); actionBar.setBackgroundDrawable (nuevo ColorDrawable (Color.parseColor ("# ÷4E2")));
rockydgeekgod
Añádelo al método onCreate de tu actividad.
Ojonugwa Jude Ochalifu
3
use getSupportActionBar () instad de getActionBar ()
Chanaka Fernando
69

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

Es una herramienta increíble que te permite personalizar tu barra de acción con una vista previa en vivo.

Intenté las respuestas anteriores, pero siempre tuve problemas para cambiar otros colores, como las pestañas y las letras, y pasé horas ajustando cosas. Esta herramienta me ayudó a completar mi diseño en solo un par de minutos.

Aquí hay una captura de pantalla de la herramienta.

¡Todo lo mejor! :)

Mohammad Shabaz Moosa
fuente
¿Cómo configuro mi aplicación para usar los archivos una vez que se agregan a mi aplicación?
Mike
En el contexto de la captura de pantalla anterior (ejemplo con nombre), después de pegar la carpeta res generada, debe tener un nuevo estilo @ estilo / Tema. Ejemplo. En AndroidManifest.xml, establezca <application android: theme = "@ style / Theme.example">. Debería funcionar :)
Mohammad Shabaz Moosa
1
obsoleto. desafortunadamente
Liangjun
55

Tuve el mismo problema, donde mi barra de acción se volvería gris cuando ingresé ese código. Lo más probable es que su hoja de estilo original se vea así:

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

El "DarkActionBar" era lo que mantenía su barra de acción gris. Lo cambié a esto, y funcionó:

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

También agregué cómo editar el color del texto. Además, no es necesario cambiar nada relacionado con los recursos.

-Madriguera

Madriguera
fuente
38

El comportamiento de Actionbar también se puede cambiar en las API <11

Consulte la documentación oficial de Android como referencia

Estoy creando una aplicación minSdkVersion = "9"y targetSdkVersion = "21"cambié el color de la barra de acción y funciona bien con API nivel 9

Aquí hay 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>

y establece el color de la barra de acción que quieras

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>

El color de la barra de acción también se puede definir en el .classarchivo, el fragmento es

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

pero esto no funcionará con la API <11 , por lo que diseñar la barra de acción xmles solo para API <11

Apurva
fuente
El fragmento no funciona en mi aplicación cuando se usa en un fragmento. Lo cambié por ActionBar bar = getActivity (). GetActionBar (); . Tan pronto como el fragmento está a punto de abrirse, se bloquea.
Jose Manuel Abarca Rodríguez
1
Encontró el problema, funciona con: ActionBar actionBar = getSupportActionBar ();
Jose Manuel Abarca Rodríguez
20

Agregue directamente esta línea con su código de color

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

No es necesario crear un objeto ActionBar cada vez ...

Mente loca
fuente
1
Sería mejor usar recursos para obtener el color en lugar de tenerlo como texto. getSupportActionBar().setBackgroundDrawable(new ColorDrawable(getResources().getColor(android.R.color.black)));
Dinesh
15

En las personas Nexus 4 esto parece hacer que el color se vuelva gris.

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 el crédito a esta publicación, pero está enterrado en los comentarios, por lo que quería mostrarlo aquí) https://stackoverflow.com/a/17198657/1022454

John Ballinger
fuente
2
Después de pasar innumerables horas tratando de descubrir que WTH estaba mal, esta respuesta me ayudó.
Abdullah Umer
13

prueba un código de línea:

getActionBar().setBackgroundDrawable(new ColorDrawable(getResources().getColor(R.color.MainColor)));
SANAT
fuente
1
Mi aplicación se bloquea con esta respuesta. Para que funcione en un fragmento, lo cambié así: getActivity (). GetActionBar (). SetBackgroundDrawable (new ColorDrawable (getActivity (). GetResources (). GetColor (R.color.col_nar))); , también probé getActivity (). getActionBar (). setBackgroundDrawable (new ColorDrawable (getResources (). getColor (R.color.col_nar))); . Se bloquea tan pronto como se abre el fragmento.
Jose Manuel Abarca Rodríguez
1
Encontró el problema, funciona con: ActionBar actionBar = getSupportActionBar ();
Jose Manuel Abarca Rodríguez
1
La respuesta es para la actividad. Si desea usarlo con fragmentos, debe usar getActivity (). GetActionBar () para fragmentos
SANAT
7

Use el código a continuación para proporcionar un color diferente al texto de la barra de acción y al fondo de la barra de acción, solo use el tema a continuación en manifiesto contra la actividad en la que desea salida :)

<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 lo es todo para mí
fuente
5

Así es como puede cambiar el color de la barra de acción.

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

Desde su MainActivity.java cambie el color de la barra de acción como este

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

Cuando amplíe la actividad, use el siguiente código

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

Cuando extienda AppCompatActivity use el siguiente código

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

Este código puede 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
fuente
1

Use este código ... para cambiar el color de fondo de la barra de acción. abra "res / values ​​/ themes.xml" (si no está presente, créelo) y agregue

<?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 solo para Android 3.0 y versiones superiores

Amey Bawiskar
fuente
1

Esto funcionó para mí, 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
fuente
1

Es muy simple para aquellos que usan API 21 o superior. Use este código a continuación

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

Usa esto, funcionaría.

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

A veces esta opción arroja NullPointerException

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

Pero esta opción me funcionó. Entonces puedes probar esto.

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

Codificación feliz

Shahadat Hossain
fuente
0

Si está utilizando Androidx AppCompact. Use el siguiente código.

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

archivo color.xml:

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