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");
Tawani
la source

Réponses:

333

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

bhatt4982
la source
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.

Seb DA ROCHA
la source
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);
Dmitry
la source
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).

badMonkey
la source
10

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

tv.setBackgroundColor(Color.parseColor("#808080"));
Vivek Warde
la source
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 :)

user1252459
la source
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
dharmx
la source
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);
Sahil Sharma
la source
4
tv.setTextColor(getResources().getColor(R.color.solid_red));
Yash Patil
la source
3

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

Siddharth
la source
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"));
Hamad
la source
2

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

myTextView.setBackgroundColor(ContextCompat.getColor(this,R.color.mycolor)); 
Mladen Rakonjac
la source
1

Jut utilisation

ArrayAdapter<String> adaptername = new ArrayAdapter<String>(this,
            android.R.layout.simple_dropdown_item_1line, your array list);
Pavan Anadkat
la source
-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.

Richa
la source
Programately ... not xml
tous les