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


169

La définition de la couleur d'arrière-plan par programme d'un Android TextViewne semble pas fonctionner. Il me manque 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 fait disparaître TextView.

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

Réponses:


333

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


5
L'API Android est vraiment quelque chose, pourquoi ne pourrait-il pas générer une erreur?
Tawani

53
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.
CommonsWare

6
Oh! Cela aurait certainement pu être mieux fait avec des énumérations plutôt que des entiers omniprésents. Merci d'avoir répondu.
Wojciech Górski

2
Ils pourraient utiliser différents types de signatures! Un appelé ColorId et un autre appelé HexColor ou quelque chose. Les deux sont des entiers mais ils ne sont pas du même type

1
Très étrange. De la documentation: la ressource doit faire référence à un objet Drawable ou 0 pour supprimer l'arrière-plan.
Artem

73

Essaye ça:

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

Je suis d'accord qu'une couleur et une ressource ont le même type, mais je passe aussi quelques heures à trouver cette solution.


2
Je ne comprends pas tout à fait cela pour le moment (en regardant les documents de l'API) mais cela fonctionne, alors merci!
CodeJustin.com

Merci, vous m'avez fait gagner quelques heures! Maintenant que je connais la solution, cela a du sens pour moi, mais je suis sûr qu'il m'aurait fallu quelques heures pour comprendre cela par moi-même.
FreewheelNat

Merci. L'API Android est parfois vraiment non intuitive.
suDocker

64

Pour définir la couleur rouge:

textView.setBackgroundColor(0xfff00000);

Ou

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

textView.setBackgroundResource(R.color.solid_red);

1
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 de poids fort sur non zéro pour la transparence. Je me fais attraper tout le temps en spécifiant le RVB sans le A. Pour définir l'arrière-plan en bleu pur, utilisez 0xff0000ff, pas 0x0000ff ou cela ne fonctionnera pas.
JohnnyLambada

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

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

@Weapn X La fonction prend un entier de 4 octets. 6 chiffres hexadécimaux correspondent à 3 octets.

20

J'ai eu un problème similaire où je créais une couleur numérique sans considérer le canal alpha principal. c'est à dire. mytext.setTextColor(0xFF0000)(pensant que ce serait rouge). Bien qu'il s'agisse d'une couleur rouge, elle est également transparente à 100% car it = 0x00FF0000; la valeur correcte à 100% opaque est 0xFFFF0000ou mytext.setTextcolor(0xFFFF0000).


10

Juste cette 1 ligne de code a changé l'arrière-plan par programmation

tv.setBackgroundColor(Color.parseColor("#808080"));

8

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

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

PS a publié cette réponse car les autres solutions ne fonctionnaient pas pour moi. J'espère que cela aidera quelqu'un :)


5

voici en petit détail,

si vous êtes en activité, utilisez ce

textview.setBackground(ContextCompat.getColor(this,R.color.yourcolor));

si vous êtes en fragment, utilisez le code ci-dessous

textview.setBackground(ContextCompat.getColor(getActivity(),R.color.yourcolor));

si vous êtes dans l'adaptateur de recyclage, utilisez le code ci-dessous

textview.setBackground(ContextCompat.getColor(context,R.color.yourcolor));

// use holder.textview if you are in onBindviewholder
//here context is passed from fragment

4

Voici les étapes pour le faire correctement:

  1. Tout d'abord, déclarez une instance de TextView dans votre MainActivity.java comme suit:

    TextView mTextView;
  2. Définissez du texte DYNAMIQUEMENT (si vous le souhaitez) comme suit:

    mTextView.setText("some_text");
  3. Maintenant, pour définir la couleur d'arrière-plan, vous devez définir votre propre couleur dans le fichier res-> values-> colors.xml comme suit:

    <resources>
        <color name="my_color">#000000</color>
    </resources>
  4. Vous pouvez maintenant utiliser la couleur "my_color" dans votre fichier java pour définir dynamiquement l'arrière-plan comme suit:

    mTextView.setBackgroundResource(R.color.my_color);


3

Color.parseHexColor("17ee27")n'a pas fonctionné pour moi, a plutôt Color.parseColor("17ee27")fonctionné parfaitement.


2

deux façons de le faire:

1. créez une couleur dans un fichier colors.xml comme:

<resources>
        <color name="white">#ffffff</color>
</resources>

et utilisez la classe java int activity comme:

et.setBackgroundResource(R.color.white);

2.

et.setBackgroundColor(getResources().getColor(R.color.white));
                or
et.setBackgroundColor(Color.parseColor("#ffffff"));

2

Si vous souhaitez prendre en charge toutes les versions: essayez ceci:

myTextView.setBackgroundColor(ContextCompat.getColor(this,R.color.mycolor)); 

1

Jut utilisation

ArrayAdapter<String> adaptername = new ArrayAdapter<String>(this,
            android.R.layout.simple_dropdown_item_1line, your array list);

-10

vous pouvez utiliser android:textColor= "n'importe quelle couleur de texte que vous voulez donner "dans un fichier xml où votre vue de texte est déclarée.


Programately ... not xml
tous les
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.