Come impostare il colore del testo di TextView nel codice?


544

In XML, possiamo impostare un colore del testo tramite l' textColorattributo, ad esempio android:textColor="#FF0000". Ma come posso modificarlo con la codifica?

Ho provato qualcosa del tipo:

holder.text.setTextColor(R.color.Red);

Dove holderè solo una classe ed textè di tipo TextView. Il rosso è un valore RGB (# FF0000) impostato in stringhe.

Ma mostra un colore diverso piuttosto che rosso. Che tipo di parametro possiamo passare in setTextColor ()? Nella documentazione, dice int, ma è un valore di riferimento delle risorse o qualcos'altro?


Una nota sulla modifica dell'interfaccia utente nel codice, si prega di considerare i vantaggi di vedere l'interfaccia utente in fase di progettazione, riducendo al minimo le modifiche al runtime.
AlikElzin-Kilaka,

Risposte:


1245

Dovresti usare:

holder.text.setTextColor(Color.RED);

ColorNaturalmente puoi usare varie funzioni della classe per ottenere lo stesso effetto.

  • Color.parseColor (Manuale) (come usa LEX)

    text.setTextColor(Color.parseColor("#FFFFFF"));
  • Color.rgbe Color.argb( Manual rgb ) ( Manual argb ) (come usa Ganapathy)

    holder.text.setTextColor(Color.rgb(200,0,0));
    holder.text.setTextColor(Color.argb(0,200,0,0));
  • E ovviamente, se vuoi definire il tuo colore in un XMLfile, puoi farlo:

    <color name="errorColor">#f00</color>

    poiché la getColor()funzione è obsoleta 1 , è necessario utilizzarla in questo modo:

    ContextCompat.getColor(context, R.color.your_color);
  • Puoi anche inserire HEX semplice, in questo modo:

    myTextView.setTextColor(0xAARRGGBB);

    Dove hai prima un canale alfa, poi il valore del colore.

Dai un'occhiata al manuale completo, ovviamente, la classe pubblica Color estende Object .


1 Questo codice era presente anche qui:

textView.setTextColor(getResources().getColor(R.color.errorColor));

Questo metodo è ora deprecato in Android M. Puoi comunque utilizzarlo dal contextCompat nella libreria di supporto , come ora mostra l'esempio.


2
Inoltre, se il testo è un collegamento è necessario utilizzare text.setLinkTextColor (...); nel codice o Android: textColorLink = "..." in XML
WOUNDEDStevenJones

1
@Nanne Sarebbe bello se la tua risposta menzionasse anche che R.color.XXX è un riferimento al colore. Significa che deve essere dereferenziato (come nel tuo esempio), per chiarezza.
nyaray,

Non sono sicuro di cosa intendi? Come in, senza riferimenti e quindi utilizzerà più risorse o intendi qualcos'altro?
Nanne,

C'è un modo per dire se un determinato valore di colore farà scomparire un testo?
Christopher Masser,

6
getColor(int)è deprecato.
RestInPeace,

137

Se vuoi ancora specificare i tuoi colori nel tuo file XML:

<color name="errorColor">#f00</color>

Quindi fai riferimento nel tuo codice con uno di questi due metodi:

textView.setTextColor(getResources().getColor(R.color.errorColor, getResources().newTheme()));    

o

textView.setTextColor(getResources().getColor(R.color.errorColor, null));

Il primo è probabilmente preferibile se stai compilando con Android M, tuttavia il tema che passi può essere nullo, quindi forse è più facile per te?

E se stai usando la libreria Compat puoi fare qualcosa del genere

textView.setTextColor(ContextCompat.getColor(context, R.color.errorColor));

9
Per setTextColor, perché deve prendere getResources (). GetColor () anziché il riferimento diretto R.color.errorColor? R.color.x funziona con quasi tutti gli altri metodi. Incredibilmente frustrante!
Civile,

8
@Civilian: perché il parametro int richiesto dai metodi setXXXColor () viene considerato come valore ARGB effettivo da utilizzare, NON come valore da cercare nel file delle risorse. Stranamente, la classe View ha sia setBackgroundColor () che setBackgroundResource (), mentre a TextView manca un metodo setTextResource ().
Ian Kemp,

1
getColor(int)è deprecato. ContextCompat.getColor(getContext(), R.color.yourColor);sembra essere il rimpiazzo.
RestInPeace,

45

E un altro:

TextView text = (TextView) findViewById(R.id.text);
text.setTextColor(Color.parseColor("#FFFFFF"));

1
getResources()è una funzione membro di contesto. Per gli adattatori, utilizzare getContext().getResources(). I valori di colore dovrebbero andare in risorse, come nella risposta di @ xbakesx.
C0D3LIC1OU5,

40

Puoi farlo solo da un file XML.

Crea un color.xmlfile nella cartella dei valori:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="textbody">#ffcc33</color>

</resources>

Quindi, in qualsiasi file XML, puoi impostare il colore per il testo usando,

android:textColor="@color/textbody"

Oppure puoi usare questo colore in un file Java:

final TextView tvchange12 = (TextView) findViewById(R.id.textView2);
//Set color for textbody from color.xml file
tvchange1.setTextColor(getResources().getColor(R.color.textbody));

27

Puoi usare

holder.text.setTextColor(Color.rgb(200,0,0));

Puoi anche specificare quale colore vuoi con Trasparenza.

holder.text.setTextColor(Color.argb(0,200,0,0));

a per valore Alpha (trasparente) r-rosso g-verde b-blu


15

usa il seguente codice in layout.xml

<TextView  android:id="@+id/textView1"    
android:layout_width="wrap_content"    
android:layout_height="wrap_content" 
android:text="@string/add"
android:layout_marginTop="16dp"
android:textAppearance="?
android:attr/textAppearanceMedium"
android:textColor="#25383C"
android:textSize="13sp" />

<TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/add"
        android:layout_marginTop="16dp"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:textColor="#25383C"
        android:textSize="13sp" />

15

Esistono diversi modi per impostare il colore nella vista testo.

  1. Aggiungi il valore del colore in studio res-> valori-> colors.xml come

    <color name="color_purple">#800080</color>

    Ora imposta il colore in xml o actvity class come

    text.setTextColor(getResources().getColor(R.color.color_purple)
  2. Se si desidera fornire il codice colore, utilizzare direttamente sotto il codice Color.parseColor

    textView.setTextColor(Color.parseColor("#ffffff"));   
  3. Puoi anche usare RGB

    text.setTextColor(Color.rgb(200,0,0));
  4. L'utilizzo può anche utilizzare hexcode diretto per textView. Puoi anche inserire HEX semplice, in questo modo:

    text.setTextColor(0xAARRGGBB);
  5. Puoi anche usare argb con valori alfa.

       text.setTextColor(Color.argb(0,200,0,0));

    a per Alpha (trasparente) v.

  6. E se stai usando la libreria Compat puoi fare qualcosa del genere

       text.setTextColor(ContextCompat.getColor(context, R.color.color_purple));

9

Normalmente lo faccio per qualsiasi vista:

myTextView.setTextColor(0xAARRGGBB);

dove

  • AA definisce alpha (00 per trasparente, FF per opaco)

  • RRGGBB definisce il normale codice colore HTML (come FF0000 per il rosso).


E perché il voto negativo? Puoi aggiungere qualche pensiero su questo per favore?
AW,

7

Se si prevede di utilizzare setTextAppearance, è necessario sapere che sovrascriverà il colore del testo con lo stile ereditato dal tema. Quindi, se si desidera utilizzare entrambi, impostare il colore in seguito .

Questo funziona:

textView.setTextAppearance(context, android.R.style.TextAppearance_Medium);
textView.setTextColor(Color.RED);

Mentre questo farà sì che il tuo colore del testo sia ad esempio bianco (per il tema scuro) o nero (per il tema chiaro):

textView.setTextColor(Color.RED);
textView.setTextAppearance(context, android.R.style.TextAppearance_Medium);

Contrariamente a ciò in XML, l'ordine è arbitrario.


7
textView.setTextColor(ContextCompat.getColor(getApplicationC‌​ontext(),R.color.col‌​orWhite)); 

Nel colors.xmlfile, scrivi nel seguente codice:

<color name="colorWhite">#FFFFFF</color>

6

Credo che se si desidera specificare un colore come risorsa (nel file XML ), è necessario fornire il valore ARGB (non semplicemente il valore RGB).

Prova a cambiare il valore del colore in #FFFF0000. Dovrebbe darti ROSSO.


secondo la mia esperienza, non è vero ed è possibile utilizzare un valore RGB anziché un valore ARGB
slinden77

6

text.setTextColor(getResource().getColor(R.color.black)) hai creato il colore nero in color.xml.

O

text.setTextColor(Color.parseColor("#000000")) qui digitare il codice esadecimale desiderato

O

text.setTextColor(Color.BLACK) puoi usare campi di colore statici


5

Uso:

TextView tv = new TextView(this);
tv.setTextColor(Color.rgb(285,0,0));

5
holder.text.setTextColor(Color.rgb(200,0,0));

o

myTextView.setTextColor(0xAARRGGBB);

4

Utilizzando Adapter è possibile impostare il colore del testo utilizzando questo codice:

holder.text_view = (TextView) convertView.findViewById(R.id.text_view);
holder.text_view.setTextColor(Color.parseColor("#FF00FF"));

4
TextView text = new TextView(context);
text.setTextColor(Color.parseColor("any hex value of a color"));

Il codice sopra funziona dalla mia parte. Ecco textun oggetto TextView su cui è necessario impostare il colore.



2

Dall'API 23 in poi, getResources().getColor()è obsoleto.

Usa questo invece:

textView.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.color_black));

1
   textViewStatus.setTextColor(res.getColor(R.color.green));

1

In Adapter è possibile impostare il colore del testo utilizzando questo codice:

holder.my_text_view = (TextView) convertView.findViewById(R.id.my_text_view);
holder.my_text_view.setTextColor(Color.parseColor("#FFFFFF"));

1

se si desidera fornire direttamente il codice colore, utilizzare

textView.setTextColor(Color.parseColor("#ffffff"));

o se vuoi dare il codice colore dalla cartella colori quindi usa

textView.setTextColor(R.color.white);

questo codice textView.setTextColor (R.color.white); non funziona Puoi usare text.setTextColor (getResources (). GetColor (R.color.color_purple) per ottenere il colore dal tuo color.xml
Gian Gomen,

1

Per impostare il colore di un TextView, TextView.setTextColor(R.color.YOURCOLOR)non è abbastanza!

Deve essere usato in questo modo -

TextView myText = (TextView) findViewById(R.id.YoutTextViewID);

myText.setTextColor(getResources().getColor(R.color.YOURCOLOR);

O

myText.setTextColor(Color.parseColor("#54D66A"));

1
holder.userType.setTextColor(context.getResources().getColor(
                    R.color.green));

0

Allo stesso modo, stavo usando color.xml:

<color name="white">#ffffff</color>
    <color name="black">#000000</color>   

Per impostare lo TextViewsfondo come:

textView.setTextColor(R.color.white);

Stavo ottenendo un colore diverso, ma quando ho usato il codice qui sotto ho ottenuto il colore effettivo.

textView.setTextColor(Color.parseColor("#ff6363"));

0

Ho fatto così: creare un file XML, chiamato Colors nella cartella res / valori.

My Colors.xml:

    <?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="vermelho_debito">#cc0000</color>
    <color name="azul_credito">#4c4cff</color>
    <color name="preto_bloqueado">#000000</color>
    <color name="verde_claro_fundo_lista">#CFDBC5</color>
    <color name="branco">#ffffff</color>
    <color name="amarelo_corrige">#cccc00</color>
    <color name="verde_confirma">#66b266</color>
</resources>

Per ottenere questi colori dal file xml, ho usato questo codice: valor è un TextView e ctx è un oggetto Context. Non lo sto usando da un'attività, ma da un BaseAdapter a un ListView. Ecco perché ho usato questo oggetto di contesto.

valor.setTextColor(ctx.getResources().getColor(R.color.azul_credito));

Spero che sia d'aiuto.


0

Per fornire valori rgb: text.setTextColor(Color.rgb(200,0,0));
per analizzare il colore da un valore esadecimale: text.setTextColor(Color.parseColor("#FFFFFF"));


0

Se si utilizza un adattatore e si desidera ancora utilizzare un colore definito nelle risorse, è possibile provare il seguente approccio:

holder.text.setTextColor(holder.text.getContext().getResources().getColor(R.color.myRed));

0
TextView textresult = (TextView)findViewById(R.id.textView1);
textresult.setTextColor(Color.GREEN);

0

getColor () è depreceted

Quindi prova in questo modo:

 tv_title.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.sf_white));

0

Lo stavo facendo per un TextView in un ViewHolder per un RecyclerView. Non sono così sicuro del perché, ma non ha funzionato per me nell'inizializzazione di ViewHolder.

public ViewHolder(View itemView) {
    super(itemView);
    textView = (TextView) itemView.findViewById(R.id.text_view);
    textView.setTextColor(context.getResources().getColor(R.color.myColor));
    // Other stuff
}

Ma quando l'ho spostato su onBindViewHolder, ha funzionato bene.

public void onBindViewHolder(ViewHolder holder, int position){
    // Other stuff
    holder.textView.setTextColor(context.getResources().getColor(R.color.myColor));
}

Spero che questo aiuti qualcuno.

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.