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.
Vous avez rendu votre bouton transparent. Le premier octet est l'alpha.
Essayez v.setBackgroundColor(0xFF00FF00);
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.
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));
Vous pouvez définir la couleur hexadécimale sur n'importe quelle ressource avec:
View.setBackgroundColor(Color.parseColor("#e7eecc"));
// 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.
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
.
essayez d'ajouter:
setBackgroundColor(Color.parseColor("#FF0000"));
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"
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));
Vous pouvez utiliser simplement:
view.setBackgroundColor(Color.parseColor("#FFFFFF"));
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.
mButton.setBackgroundColor(getResources().getColor(R.color.myColor));
Déclarer avec Android 6 utiliser ContextCompact
view.setBackgroundColor( ContextCompat.getColor(this, R.color.your_color));
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);
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);
....
}