302 votes

Comment modifier la couleur d'arrière-plan de la barre d'action d'une ActionBarActivity à l'aide de XML ?

Détails :

J'étend l'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 a android:theme="@android:style/Theme.Light"

Question : L'application est claire, mais la barre d'action est bleue avec des icônes grises, à peine visibles sur le fond bleu. Je souhaite également que la barre d'action soit claire, afin que les icônes grises soient plus visibles.

J'ai essayé de modifier les styles mais sans succès.
Je rate probablement quelque chose d'insignifiant.

Comment modifier la couleur d'arrière-plan de la barre d'action d'une ActionBarActivity à l'aide de XML ?

2 votes

Fermeture de ce vieux truc. Les points pour Sannidhi, à la demande générale, mais les réponses à cette question couvrent un certain nombre de versions d'Android, et dans mon contexte, la suggestion de David Miller d'utiliser SherlockActionBar était la plus pertinente.

1 votes

Petite anecdote pour les autres : Si vous faites en sorte que le premier élément de votre vue XML ait le même fond que votre barre d'action (dans notre cas, blanc), la barre d'action devient grise.

0 votes

Quand on y pense, la barre de titre et la barre d'action n'offrent rien de spécial. Elles sont plutôt une nuisance, surtout quand on ne les connaît pas. Une meilleure alternative serait de les cacher et de concevoir votre propre barre de titre. Vous pouvez ajouter vos propres widgets avec Views et drawables. 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 du menu. Même beaucoup d'applications ont abandonné la barre d'action en faveur de la leur.

539voto

Sannidhi Points 3128

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

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

Au cas où vous viseriez le niveau 11 de l'API, vous pouvez modifier la couleur d'arrière-plan de la barre d'action 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 "MonThéme" comme thème pour l'application/activité.

12 votes

@AlexanderFragotsis utiliser <item name="android:textColor">@color/my_color</item> .

31 votes

La même approche doit être utilisée si vous utilisez la bibliothèque ActionBarCompat. La seule différence est que vous devez modifier ActionBarStyle (sans Android : préfixe) pour définir l'apparence de la barre d'action sur les appareils Android pré-3.0.

3 votes

Est-il possible, au lieu de mettre le code HEX de la couleur, de référencer une @android:color ou même une couleur personnalisée définie dans colors.xml ? J'ai essayé sans succès.

219voto

coder_For_Life22 Points 8908

Essayez ceci

ActionBar bar = getActionBar();
bar.setBackgroundDrawable(new ColorDrawable("COLOR"));

1 votes

11-06 10:53:16.985 : E/AndroidRuntime(16956) : java.lang.NoSuchMethodError : com.acme.myActivity.getActionBar

1 votes

@coder_For_Life22 savez-vous comment je peux obtenir une barre d'action contextuelle ?

6 votes

A ce jour, la bibliothèque de support elle-même n'a pas de barre d'action, pour cela vous devrez inclure la SherlockActionBar.

127voto

user2428604 Points 501

Essayez ceci :

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

1 votes

Comment cela s'intègre-t-il dans le reste du code ? Je suis juste curieux de savoir où ajouter cette information.

7 votes

J'ai exactement la même question que @JGallardo . Où ajoutez-vous ceci ? J'ai essayé dans onCreate mais cela a donné un NullPointerException Edit : Voici le code que j'ai ajouté à restoreActionBar ActionBar actionBar = getSupportActionBar() ; actionBar.setBackgroundDrawable(new ColorDrawable(Color.parseColor("#E5E4E2"))) ;

0 votes

Ajoutez-le à la méthode onCreate de votre activité.

69voto

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

C'est un outil étonnant 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 à faire des ajustements. Cet outil m'a permis de réaliser mon dessin en quelques minutes seulement.

Here's a screenshot of the tool

Bonne chance ! :)

0 votes

Comment puis-je configurer mon application pour qu'elle utilise les fichiers une fois qu'ils ont été ajoutés à mon application ?

0 votes

Dans le contexte de la capture d'écran ci-dessus (nommé exemple), 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">. Cela devrait fonctionner :)

2 votes

Déprécié. Malheureusement

58voto

Warren Points 261

J'avais le même problème, ma barre d'action devenait grise lorsque j'entrais ce code. Il est probable que votre feuille de style originale ressemblait à 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 ceci, et ça a marché :

<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, il n'est pas nécessaire de modifier les éléments qui entourent les ressources.

-Warren

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X