web-dev-qa-db-fra.com

Comment changer la couleur d'arrière-plan du ActionBar d'un ActionBarActivity à l'aide de XML?

Détails:

J'étends ActionBarActivity.
Eclipse et SDK ont été entièrement corrigés à compter 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"

Issue: L'application est légère, mais ActionBar est bleu avec des icônes grises, à peine visibles sur la couleur d'arrière-plan bleue. Je souhaite également que la barre d’action soit légère afin que les icônes grises soient plus visibles.

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

Comment changer la couleur d'arrière-plan du ActionBar d'un ActionBarActivity à l'aide de XML?

264
user77115

Selon 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 (API de niveau 11)."

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

Juste au cas où, si vous visiez un niveau d’API minimum de 11, vous pouvez modifier la couleur d’arrière-plan de 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 d'application/d'activité.

508
lupchiazoem

Essaye ça

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

essaye ça:

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

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

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

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

Here's a screenshot of the tool

Bonne chance! :)

69

J'ai eu le même problème, où ma barre d'action devenait gris lorsque j'ai entré ce code. Il est probable que votre feuille de style originale ressemble à ceci:

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

La "DarkActionBar" était ce qui gardait votre barre d’action grise. Je l'ai changé en ceci 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 ajouté comment modifier la couleur du texte. En outre, pas besoin de changer quoi que ce soit autour des ressources.

-Garenne

55
Warren

Le comportement de la barre d'actions peut également être modifié dans les API <11

Voir le Documentation officielle Android pour référence

Je construis 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éfinir la couleur de la barre d'action que vous voulez

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 le fichier .class, l’extrait est

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

mais cela ne fonctionnera pas avec l’API <11 , de sorte que le style La barre d'action dans xml est le seul moyen pour l'API <11

38
Apurva

Direct ajouter cette ligne avec votre code de couleur

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

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

19
CrazyMind

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 mérite de cet article, mais il est enfoui dans les commentaires, je voulais donc le faire apparaître ici) https://stackoverflow.com/a/17198657/1022454

15
John Ballinger

essayez un code de ligne:

getActionBar().setBackgroundDrawable(new ColorDrawable(getResources().getColor(R.color.MainColor)));
13
SANAT

Utilisez le code ci-dessous pour attribuer une couleur différente au texte de la barre d’action et à l’arrière-plan de la barre d’action. Il suffit d’utiliser le thème ci-dessous dans Manifest par rapport à l’activité pour laquelle vous souhaitez générer le résultat :)

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

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

Depuis votre MainActivity.Java, changez la couleur de la barre d’action de la manière suivante:

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

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"));
4
arlo shie

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>
2
Qutbuddin Bohra

Utilisez ce code ..pour modifier la couleur d'arrière-plan de la barre d'action. 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 pour Android 3.0 et versions supérieures uniquement.

1
Amey Bawiskar

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>
0
Tejasvi Hegde

Utilisez ceci, cela fonctionnerait.

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