Comment changer la couleur d'arrière-plan du ActionBar d'un ActionBarActivity en utilisant XML?

277

Détails:

J'étends ActionBarActivity.
Eclipse et SDK entièrement corrigés à partir du 2011-11-06.

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

Déployé sur un appareil Samsung avec Android 2.3.3, l'
application aandroid:theme="@android:style/Theme.Light"

Problème: l' application est claire, mais ActionBar est bleu avec des icônes grises, à peine visible sur la couleur d'arrière-plan bleu. Je veux également que l'ActionBar soit clair, afin que les icônes grises soient plus visibles.

J'ai essayé de modifier les styles mais en vain.
Je manque probablement quelque chose de trivial.

Comment changer la couleur d'arrière-plan du ActionBar d'un ActionBarActivity en utilisant XML?

user77115
la source
2
Fermeture de ce vieux châtaignier. Souligne Sannidhi, à la demande générale, mais les réponses à cette question couvrent plusieurs versions d'Android, et dans mon contexte, la suggestion de David Millers d'utiliser SherlockActionBar était la plus pertinente.
user77115
1
Petite friandise pour les autres: si vous faites le premier élément de votre vue XML le même arrière-plan que votre ActionBar (dans notre cas, blanc), l'ActionBar devient gris.
Joshua Pinter
Quand on y pense, TitleBar et ActionBar n'offrent rien de spécial. Ils ressemblent plus à une nuisance, surtout lorsque vous ne les connaissez pas. Une meilleure alternative serait de les cacher et de concevoir votre propre barre de titre. Vous pouvez ajouter vos propres widgets avec des vues et des dessins. Comme la barre de titre ne fournit aucun widget. Et la barre d'action ne peut avoir qu'une seule liste déroulante, pour tous les éléments de menu.Beaucoup d'applications ont abandonné la barre d'action au profit de la leur.

Réponses:

523

Selon la documentation - "Vous pouvez contrôler les comportements et la visibilité de la barre d'actions avec les API ActionBar, qui ont été ajoutées dans Android 3.0 (API niveau 11)."

Ainsi, ActionBar ne fonctionnera pas pour votre environnement cible qui est au niveau API 10 (Android 2.3.3).

Au cas où, si vous ciblez le niveau d'API minimum 11, vous pouvez modifier la couleur d'arrière-plan d'ActionBar en définissant un style personnalisé, comme suit:

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

Et, définissez "MyTheme" comme thème pour l'application / l'activité.

lupchiazoem
la source
12
@AlexanderFragots est utilisé <item name="android:textColor">@color/my_color</item>.
lethargicpanda
28
La même approche doit être utilisée si vous utilisez la bibliothèque ActionBarCompat. La seule différence est que vous devez modifier l' élément actionBarStyle (sans android: préfixe) pour définir l'apparence de la barre d'action sur les appareils Android antérieurs à la version 3.0
Alex Semeniuk
3
Est-il possible, au lieu de mettre le code HEX de la couleur, de référencer une @android:colorou même une couleur personnalisée définie dans colors.xml? Je l'ai essayé sans succès.
jmrodrigg
1
Je ne suis pas en mesure de modifier la couleur du texte de la barre d'action de texte à l'aide de "<item name =" android: textColor "> @ color / my_color </item>"
Shirish Herwade
2
Cela n'a pas fonctionné pour moi avec android: background tag mais quand j'ai laissé de côté le tag android et que j'ai mis juste <item name = "background"> ​​la couleur a changé pour toutes les plateformes.
stevyhacker
209

Essaye ça

ActionBar bar = getActionBar();
bar.setBackgroundDrawable(new ColorDrawable("COLOR"));
coder_For_Life22
la source
1
11-06 10: 53: 16.985: E / AndroidRuntime (16956): java.lang.NoSuchMethodError: com.acme.myActivity.getActionBar
user77115
1
@ coder_For_Life22 savez-vous comment obtenir une barre d'action contextuelle?
Geeks On Hugs
5
afaik, la bibliothèque de support elle-même n'a pas l'ActionBar, pour cela vous devrez inclure le SherlockActionBar.
David Miler
22
c'est peut-être étrange, mais dans mon cas, bar.setBackgroundDrawable(new ColorDrawable(Color.BLUE));changez la couleur de la barre d'action en gris. Cela se produit également si vous mettez une autre couleur, etc. Color.RED, Color.GREENetc. Est-ce que quelqu'un a le même problème ou connaît la cause de ce problème? J'utilise un appareil Nexus S
AlexAndro
4
stackoverflow.com/a/17198657/1022454 Ce message semble résoudre le problème où la couleur de la barre d'action devient grise.
Jonathon Fry
124

essaye ça:

ActionBar bar = getActionBar();
bar.setBackgroundDrawable(new ColorDrawable(Color.parseColor("#0000ff")));
user2428604
la source
1
Comment cela s'intègre-t-il dans le reste du code? juste curieux de savoir où ajouter cela
JGallardo
7
J'ai la question exacte en tant que @JGallardo. Où ajoutez-vous cela? Je l'ai essayé onCreatemais il a donné un NullPointerException Edit: c'est le code que j'ai ajouté à restoreActionBar ActionBar actionBar = getSupportActionBar (); actionBar.setBackgroundDrawable (nouveau ColorDrawable (Color.parseColor ("# E5E4E2")));
rockydgeekgod
Ajoutez-y la méthode onCreate de votre activité.
Ojonugwa Jude Ochalifu
3
utilisez getSupportActionBar () au lieu de getActionBar ()
Chanaka Fernando
69

Utilisez ceci - http://jgilfelt.github.io/android-actionbarstylegenerator/

C'est un outil incroyable qui vous permet de personnaliser votre barre d'action avec un aperçu en direct.

J'ai essayé les réponses précédentes, mais j'ai toujours eu des problèmes pour changer d'autres couleurs comme les onglets et les lettres et j'ai passé des heures à peaufiner des choses. Cet outil m'a aidé à réaliser ma conception en quelques minutes.

Voici une capture d'écran de l'outil

Bonne chance! :)

Mohammad Shabaz Moosa
la source
comment configurer mon application pour utiliser les fichiers une fois qu'ils sont ajoutés à mon application?
Mike
Dans le contexte de la capture d'écran ci-dessus (exemple nommé), après avoir collé le dossier res généré, vous devriez avoir un nouveau style @ style / Theme.Example. Dans AndroidManifest.xml, définissez <application android: theme = "@ style / Theme.example">. Devrait fonctionner :)
Mohammad Shabaz Moosa
1
obsolète. malheureusement
Liangjun
55

J'ai eu le même problème, où ma barre d'action devenait grise lorsque j'ai entré ce code. Il y a de fortes chances que votre feuille de style d'origine ressemble à ceci:

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

Le "DarkActionBar" était ce qui gardait votre barre d'action grise. Je l'ai changé en cela, et cela a fonctionné:

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

J'ai également expliqué comment modifier la couleur du texte. De plus, pas besoin de changer quoi que ce soit autour des ressources.

-Garenne

Garenne
la source
38

Le comportement de l'Actionbar peut également être modifié dans les API <11

Voir la documentation officielle Android pour référence

Je crée une application avec minSdkVersion = "9"et targetSdkVersion = "21"j'ai changé la couleur de la barre d'action et cela fonctionne bien avec le niveau 9 de l'API

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

et définissez la couleur de la barre d'action que vous souhaitez

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>

La couleur de la barre d'action peut également être définie dans un .classfichier, l'extrait est

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

mais cela ne fonctionnera pas avec l' API <11 , donc le style de la barre d'action xmln'est que pour l'API <11

Apurva
la source
L'extrait ne fonctionne pas dans mon application lorsqu'il est utilisé dans un fragment. Je l'ai changé pour ActionBar bar = getActivity (). GetActionBar (); . Dès que le fragment est sur le point d'être ouvert, il se bloque.
Jose Manuel Abarca Rodríguez
1
Trouvé le problème, il fonctionne avec: ActionBar actionBar = getSupportActionBar ();
Jose Manuel Abarca Rodríguez
20

Ajoutez directement cette ligne avec votre code couleur

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

pas besoin de créer un objet ActionBar à chaque fois ...

Esprit fou
la source
1
Il serait préférable d'utiliser des ressources pour obtenir la couleur plutôt que de l'avoir sous forme de texte. getSupportActionBar().setBackgroundDrawable(new ColorDrawable(getResources().getColor(android.R.color.black)));
Dinesh
15

Sur le Nexus 4, cela semble rendre la couleur grise.

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

(tout le crédit à ce post, mais il est enterré dans les commentaires, donc je voulais le faire apparaître ici) https://stackoverflow.com/a/17198657/1022454

John Ballinger
la source
2
Après avoir passé d'innombrables heures à essayer de comprendre que WTH était mauvais, cette réponse m'a aidé.
Abdullah Umer
13

essayez un code de ligne:

getActionBar().setBackgroundDrawable(new ColorDrawable(getResources().getColor(R.color.MainColor)));
SANAT
la source
1
Mon application se bloque avec cette réponse. Pour le faire fonctionner dans un fragment, je l'ai changé comme ceci: getActivity (). GetActionBar (). SetBackgroundDrawable (new ColorDrawable (getActivity (). GetResources (). GetColor (R.color.col_nar))); , a également essayé getActivity (). getActionBar (). setBackgroundDrawable (new ColorDrawable (getResources (). getColor (R.color.col_nar))); . Il se bloque dès que le fragment est ouvert.
Jose Manuel Abarca Rodríguez
1
Trouvé le problème, il fonctionne avec: ActionBar actionBar = getSupportActionBar ();
Jose Manuel Abarca Rodríguez
1
la réponse est pour l'activité. Si vous voulez l'utiliser avec un fragment, vous devez utiliser getActivity (). GetActionBar () pour les fragments
SANAT
7

Utilisez le code ci-dessous pour fournir une couleur différente au texte et à l'arrière-plan de la barre d'action.Utilisez simplement le thème ci-dessous dans le manifeste par rapport à l'activité dans laquelle vous souhaitez sortir :)

<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 est tout pour moi
la source
5

C'est ainsi que vous pouvez changer la couleur de la barre d'action.

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

À partir de votre MainActivity.java, changez la couleur de la barre d'action comme ceci

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

Lorsque vous étendez l'activité, utilisez le code suivant

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

Lorsque vous étendez AppCompatActivity, utilisez le code suivant

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

Ce code peut être utile

<!-- 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
la source
1

Utilisez ce code ..pour changer la couleur d'arrière-plan de la barre d'actions. ouvrez "res / values ​​/ themes.xml" (s'il n'est pas présent, créez-le) et ajoutez

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

Remarque: ce code fonctionne uniquement pour Android 3.0 et les versions supérieures

Amey Bawiskar
la source
1

Cela a fonctionné pour moi, pour 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
la source
1

C'est très simple pour ceux qui utilisent l'API 21 ou plus Utilisez ce code ci-dessous

pour 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
la source
0

Utilisez cela, cela fonctionnerait.

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

Parfois, cette option lève NullPointerException

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

Mais cette option fonctionne pour moi. Vous pouvez donc essayer ceci.

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

Happy Coding

Shahadat Hossain
la source
0

Si vous utilisez androidx AppCompact. Utilisez le code ci-dessous.

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

fichier color.xml:

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