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.