Android TextView: l'impostazione dinamica del colore di sfondo non funziona


169

L'impostazione programmatica del colore di sfondo di un androide TextViewnon sembra funzionare. Mi sto perdendo qualcosa!

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

Ho anche questo file (colors.xml) nella mia cartella res / valori

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

[MODIFICA]: inoltre, l'impostazione del colore del testo fa scomparire TextView.

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

Risposte:


333

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


5
L'API Android è davvero qualcosa, perché non ha potuto generare un errore?
Tawani,

53
Perché non è un errore. setBackgroundColor () assume un colore in forma numerica (ad es. 0xFFFF0000 per il rosso). R.color.white è anche un numero.
CommonsWare,

6
D'oh! Questo avrebbe sicuramente potuto essere fatto meglio con enumerazioni piuttosto che con onnipresenti ints. Grazie per la risposta.
Wojciech Górski,

2
Essi potrebbero essere utilizzando diverse firme di tipo! Uno chiamato ColorId e un altro chiamato HexColor o qualcosa del genere. Entrambi sono numeri interi ma non sono dello stesso tipo

1
Molto strano. Dalla documentazione: la risorsa deve fare riferimento a un oggetto Drawable o 0 per rimuovere lo sfondo.
Artem,

73

Prova questo:

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

Concordo sul fatto che un colore e una risorsa abbiano lo stesso tipo, ma passo anche qualche ora a trovare questa soluzione.


2
Non lo capisco completamente ora (guardando oltre api doc's) ma funziona, quindi grazie!
CodeJustin.com,

Grazie, mi hai risparmiato un paio d'ore! Ora che conosco la soluzione, ha senso per me, ma sono sicuro che mi ci sarebbero volute alcune ore per capirlo da solo.
FreewheelNat

Grazie. L'API Android a volte è davvero non intuitiva.
suDocker,

64

Per impostare il colore rosso:

textView.setBackgroundColor(0xfff00000);

O

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

textView.setBackgroundResource(R.color.solid_red);

1
Per echeggiare la risposta di Monkey dato che questa è la risposta più popolare, DEVI impostare i bit di ordine superiore su zero per la trasparenza. Sono sempre sorpreso specificando RGB senza A. Per impostare lo sfondo su blu puro, utilizzare 0xff0000ff, non 0x0000ff o non funzionerà.
Johnny Rambada,

Nel .xml il valore di un elemento <colore> funziona solo con le classiche 6 cifre: # FF0000
Arma X

@WeaponX: funziona bene con colori trasparenti (a 8 cifre).
CoolMind

@Weapn X La funzione richiede un numero intero, 4 byte. 6 cifre esadecimali sono 3 byte.

20

Ho avuto un problema simile in cui stavo creando un colore numerico senza considerare il canale alfa principale. vale a dire. mytext.setTextColor(0xFF0000)(pensando che questo sarebbe rosso). Anche se questo è un colore rosso, è anche trasparente al 100% poiché it = 0x00FF0000; il valore opaco al 100% corretto è 0xFFFF0000o mytext.setTextcolor(0xFFFF0000).


10

Solo questa 1 riga di codice ha cambiato lo sfondo a livello di codice

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

8

Beh, ho avuto una situazione in cui il servizio web ha restituito un colore in formato esadecimale come "# CC2233" e volevo mettere questo colore su textView usando setBackGroundColor (), quindi ho usato la classe Color di Android per ottenere il valore int della stringa esadecimale e lo ho passato a funzione menzionata. Tutto ha funzionato. Questo è un esempio:

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

PS ha pubblicato questa risposta perché altre soluzioni non hanno funzionato per me. Spero che questo possa aiutare qualcuno :)


5

qui è in piccolo dettaglio,

se sei in attività usa questo

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

se sei in frammento usa sotto il codice

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

se si utilizza l'adattatore recyclerview, utilizzare il codice seguente

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

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

4

Ecco i passaggi per farlo correttamente:

  1. Prima di tutto, dichiara un'istanza di TextView in MainActivity.java come segue:

    TextView mTextView;
  2. Imposta un testo DINAMICAMENTE (se vuoi) come segue:

    mTextView.setText("some_text");
  3. Ora, per impostare il colore di sfondo, devi definire il tuo colore nel file res-> valori-> colors.xml come segue:

    <resources>
        <color name="my_color">#000000</color>
    </resources>
  4. Ora puoi usare il colore "my_color" nel tuo file java per impostare dinamicamente lo sfondo come segue:

    mTextView.setBackgroundResource(R.color.my_color);

4
tv.setTextColor(getResources().getColor(R.color.solid_red));

3

Color.parseHexColor("17ee27")non ha funzionato per me, invece ha Color.parseColor("17ee27")funzionato perfettamente.


2

due modi per farlo:

1.creare il colore nel file colors.xml come:

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

e usalo in attività java class come:

et.setBackgroundResource(R.color.white);

2.

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

2

Se desideri supportare tutte le versioni: prova questo:

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

1

Jut use

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

-10

puoi usare android:textColor= "qualsiasi colore di testo tu voglia dare "nel file xml in cui è dichiarata la tua vista di testo.


Programmaticamente ... non xml
TUTTI il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.