web-dev-qa-db-fra.com

Comment définir la couleur d'arrière-plan d'une vue

J'essaie de définir la couleur d'arrière-plan d'une vue (dans ce cas, un bouton).

J'utilise ce code:

// set the background to green
v.setBackgroundColor(0x0000FF00 );
v.invalidate();

Le bouton disparaît de l'écran. Qu'est-ce que je fais de mal et quelle est la bonne façon de changer la couleur d'arrière-plan d'une vue?

Merci.

168
Peter vdL

Vous avez rendu votre bouton transparent. Le premier octet est l'alpha.

Essayez v.setBackgroundColor(0xFF00FF00);

275
rainhut

Lorsque vous appelez setBackgoundColor, il écrase/supprime toutes les ressources d'arrière-plan existantes, y compris les bordures, les coins, les marges, etc. Ce que vous souhaitez faire est de modifier la couleur de la ressource d'arrière-plan existante ...

View v;
v.getBackground().setColorFilter(Color.parseColor("#00ff00"), PorterDuff.Mode.DARKEN);

Expérimentez avec PorterDuff.Mode. * Pour obtenir différents effets.

140
EddieB

Plusieurs choix pour le faire ...

Définissez l'arrière-plan sur vert:

v.setBackgroundColor(0x00FF00);

Définissez l'arrière-plan sur vert avec Alpha :

v.setBackgroundColor(0xFF00FF00);

Définissez l'arrière-plan sur vert avec Color.GREEN constante:

v.setBackgroundColor(Color.GREEN);

Définissez l'arrière-plan sur le vert définissant dans Colors.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>     
    <color name="myGreen">#00FF00</color> 
    <color name="myGreenWithAlpha">#FF00FF00</color> 
</resources>

et en utilisant:

v.setBackgroundResource(R.color.myGreen);

et:

v.setBackgroundResource(R.color.myGreenWithAlpha);

ou le plus long:

v.setBackgroundColor(ContextCompat.getColor(getContext(), R.color.myGreen));

et:

v.setBackgroundColor(ContextCompat.getColor(getContext(), R.color.myGreenWithAlpha));
116
Jorgesys

Vous pouvez définir la couleur hexadécimale sur n'importe quelle ressource avec:

View.setBackgroundColor(Color.parseColor("#e7eecc"));
35
Vipul Patel
// set the background to green
v.setBackgroundColor(0x0000FF00 );
v.invalidate();

Le code ne met pas le bouton en vert. Au lieu de cela, cela rend le bouton totalement invisible.

Explication: la valeur hexadécimale de la couleur est incorrecte. Avec une valeur alpha égale à zéro, la couleur sera invisible.

La valeur hexadécimale correcte est 0xFF00FF00 pour une opacité totale en vert. Toute valeur alpha comprise entre 00 et FF entraînerait une transparence.

16
malte kosian

et quelle est la bonne façon de changer la couleur d'arrière-plan dans une vue?

Sur toutView? Ce que vous avez est correct, mais vous devriez abandonner l'appel invalidate().

Cependant, certains Views ont déjà des arrière-plans. Un Button, par exemple, a déjà un arrière-plan: la face du bouton lui-même. Cet arrière-plan est un StateListDrawable, que vous pouvez trouver dans Android-2.1/data/res/drawable/btn_default.xml dans votre Android SDK installation. Cela, à son tour, fait référence à un ensemble d’images bitmap à neuf patchs, disponibles en plusieurs densités. Vous auriez besoin de cloner et de modifier tout cela pour atteindre vos objectifs écologiques.

En bref, vous serez mieux servi pour trouver un autre motif d'interface utilisateur plutôt que d'essayer de changer le fond d'un Button.

12
CommonsWare

essayez d'ajouter:

setBackgroundColor(Color.parseColor("#FF0000"));
11
Long Rainbow

Pour définir la première couleur à afficher à l'écran, vous pouvez également le faire dans le fichier layout.xml approprié (conception améliorée) en ajoutant cette propriété à la vue correspondante:

Android:background="#FF00FF00"
11
JustinB

J'utilise à l'API min 16, cible 23

Button WeekDoneButton = (Button) viewWeeklyTimetable.findViewById(R.id.week_done_button);

WeekDoneButton.setBackgroundColor(ContextCompat.getColor(getActivity(), R.color.colorAccent));
6
Vostro

Vous pouvez utiliser simplement:

view.setBackgroundColor(Color.parseColor("#FFFFFF"));
5
daniel kilinskas

Cette question parle de changer la couleur de fond d'une vue. Dans l'une des réponses, la personne explique comment changer la couleur d'arrière-plan pendant l'exécution. Évidemment, vous allez regarder comment modifier d'autres objets à l'écran, mais cela devrait vous donner un bon départ en vous permettant au moins de modifier la couleur de fond de la vue lors d'un clic de bouton.

4
jbranchaud
mButton.setBackgroundColor(getResources().getColor(R.color.myColor));
4

Déclarer avec Android 6 utiliser ContextCompact

        view.setBackgroundColor( ContextCompat.getColor(this, R.color.your_color));
3
Raluca Lucaci

Vous pouvez utiliser simplement:

view.setBackgroundColor(Color.rgb(0, 198, 255));
view.setBackgroundColor(R.color.primaryColor);

Ajoute de la couleur à la valeur de couleur précédente, donc j'ai une couleur différente.

Ce qui fonctionne pour moi c'est:

view.setBackgroundResource(R.color.primaryColor);
0
meralon

Supposons que nous ayons une couleur primaire dans values=>colors.xml comme:

<resources>
    <color name="primary">#FDD835</color>
</resources>

donc si nous voulons utiliser notre couleur personnalisée dans setBackgroundColor(@ColorInt int Color), nous avons simplement besoin d'une annotation @SuppressLint("ResourceAsColor") avec le constructeur/la méthode qui sera utilisé comme:

    @SuppressLint("ResourceAsColor")
    public _LinearLayout(Context context) {
        super(context);

        // Formatting our layout : )
        super.setBackgroundColor(R.color.primary);

        ....


    }
0
ForWebTech