181 votes

TextView Android : le réglage dynamique de la couleur d'arrière-plan ne fonctionne pas

Définir la couleur d'arrière-plan d'un Android par programme TextView ne semble pas fonctionner. J'ai dû oublier quelque chose !

TextView et = new TextView(activity);
et.setText("350");
et.setBackgroundColor(R.color.white);

J'ai également ce fichier (colors.xml) dans mon dossier res/values

<resources>
        <color name="white">#ffffffff</color>
        <color name="black">#ff000000</color>
</resources>

[EDIT] : De plus, le réglage de la couleur du texte entraîne la disparition du TextView.

TextView c1 = new TextView(activity);
c1.setTextColor(R.color.solid_red);
c1.setText("My Text");

363voto

bhatt4982 Points 4648

Utilisez et.setBackgroundResource(R.color.white);

6 votes

L'API Android est vraiment quelque chose, pourquoi ne pourrait-elle pas lancer une erreur ?

54 votes

Parce que ce n'est pas une erreur. setBackgroundColor() prend une couleur sous forme numérique (par exemple, 0xFFFF0000 pour le rouge). R.color.white est également un nombre.

6 votes

D'oh ! Cela aurait certainement pu être mieux fait avec des enums plutôt que des ints omniprésents. Merci pour la réponse.

77voto

Seb DA ROCHA Points 761

Essayez ça :

TextView c1 = new TextView(activity);
c1.setTextColor(getResources().getColor(R.color.solid_red));
c1.setText("My Text");

Je suis d'accord pour dire qu'une couleur et une ressource ont le même type, mais j'ai aussi passé quelques heures à trouver cette solution.

2 votes

Je ne comprends pas tout pour l'instant (je regarde la documentation de l'API) mais ça marche, donc merci !

0 votes

Merci, vous m'avez fait gagner quelques heures ! Maintenant que je connais la solution, elle me paraît logique, mais je suis sûr qu'il m'aurait fallu quelques heures pour la trouver tout seul.

0 votes

Merci. L'API Android est vraiment non intuitive par moments.

67voto

Dmitry Points 654

Pour définir la couleur rouge :

textView.setBackgroundColor(0xfff00000);

Ou

<color name="solid_red">#fff00000</color>

textView.setBackgroundResource(R.color.solid_red);

2 votes

Pour faire écho à la réponse de badMonkey, étant donné que c'est la réponse la plus populaire, vous DEVEZ définir les bits d'ordre supérieur à non zéro pour la transparence. Je me fais tout le temps avoir en spécifiant le RGB sans le A. Pour définir le fond en bleu pur, utilisez 0xff0000ff, pas 0x0000ff ou cela ne fonctionnera pas.

0 votes

Dans le .xml, la valeur d'un élément <color> ne fonctionne qu'avec les 6 chiffres classiques : #FF0000

0 votes

@WeaponX : cela fonctionne bien avec des couleurs transparentes (en 8 chiffres).

20voto

badMonkey Points 705

J'ai rencontré un problème similaire lorsque j'ai créé une couleur numérique sans tenir compte du canal alpha principal, par exemple. mytext.setTextColor(0xFF0000) (je pensais que ce serait rouge). Bien qu'il s'agisse d'une couleur rouge, elle est également transparente à 100 %, comme le montre le tableau ci-dessous. it = 0x00FF0000; La valeur correcte de l'opacité à 100% est 0xFFFF0000 o mytext.setTextcolor(0xFFFF0000) .

8voto

user1252459 Points 161

J'ai eu une situation où le service web a retourné une couleur au format hexadécimal comme "#CC2233" et je voulais mettre cette couleur sur le textView en utilisant setBackGroundColor(), donc j'ai utilisé la classe Android Color pour obtenir la valeur int de la chaîne hexadécimale et je l'ai passée à la fonction mentionnée. Tout a fonctionné. Voici l'exemple :

String myHexColor = "#CC2233";
TextView myView = (TextView) findViewById(R.id.myTextView);
myView.setBackGroundColor(Color.pasrsehexString(myHexColor));

P.S. J'ai posté cette réponse parce que les autres solutions n'ont pas fonctionné pour moi. J'espère que cela aidera quelqu'un :)

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