Wie stelle ich die Textfarbe von TextView im Code ein?


544

In XML können wir eine Textfarbe durch das textColorAttribut wie festlegen android:textColor="#FF0000". Aber wie ändere ich es durch Codierung?

Ich habe so etwas versucht wie:

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

Wo holderist nur eine Klasse und textist vom Typ TextView. Rot ist ein in Zeichenfolgen festgelegter RGB-Wert (# FF0000).

Aber es zeigt eher eine andere Farbe als Rot. Welche Art von Parameter können wir in setTextColor () übergeben? In der Dokumentation heißt es int, aber ist es ein Ressourcenreferenzwert oder etwas anderes?


Beachten Sie beim Optimieren der Benutzeroberfläche im Code die Vorteile der Anzeige der Benutzeroberfläche in der Entwurfszeit, um die Laufzeitänderungen auf ein Minimum zu beschränken.
AlikElzin-Kilaka

Antworten:


1245

Du solltest benutzen:

holder.text.setTextColor(Color.RED);

Sie können Colornatürlich verschiedene Funktionen aus der Klasse verwenden, um den gleichen Effekt zu erzielen.

  • Color.parseColor (Manuell) (wie LEX verwendet)

    text.setTextColor(Color.parseColor("#FFFFFF"));
  • Color.rgbund Color.argb( Manual rgb ) ( Manual argb ) (wie Ganapathy verwendet)

    holder.text.setTextColor(Color.rgb(200,0,0));
    holder.text.setTextColor(Color.argb(0,200,0,0));
  • Und wenn Sie Ihre Farbe in einer XMLDatei definieren möchten , können Sie dies natürlich tun:

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

    Da die getColor()Funktion veraltet ist 1 , müssen Sie sie wie folgt verwenden:

    ContextCompat.getColor(context, R.color.your_color);
  • Sie können auch einfaches HEX einfügen, wie folgt:

    myTextView.setTextColor(0xAARRGGBB);

    Wo Sie zuerst einen Alphakanal haben, dann den Farbwert.

Schauen Sie sich natürlich das komplette Handbuch an, öffentliche Klasse Farbe erweitert Objekt .


1 Dieser Code war früher auch hier:

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

Diese Methode ist in Android M jetzt veraltet. Sie können sie jedoch aus dem contextCompat in der Support-Bibliothek verwenden , wie das Beispiel jetzt zeigt.


2
Wenn der Text ein Link ist, müssen Sie außerdem text.setLinkTextColor (...) verwenden. in Code oder Android: textColorLink = "..." in XML
WOUNDEDStevenJones

1
@Nanne Es wäre schön, wenn Ihre Antwort auch erwähnen würde, dass R.color.XXX ein Verweis auf die Farbe ist. Dies bedeutet, dass es aus Gründen der Klarheit dereferenziert werden muss (wie in Ihrem Beispiel).
Nyaray

Ich bin mir nicht sicher was du meinst? Wie in, dereferenziert und so werden mehr Ressourcen verbraucht oder meinst du etwas anderes?
Nanne

Gibt es eine Möglichkeit zu sagen, ob ein bestimmter Farbwert einen Text verschwinden lässt?
Christopher Masser

6
getColor(int)ist veraltet.
RestInPeace

137

Wenn Sie Ihre Farben dennoch in Ihrer XML-Datei angeben möchten:

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

Verweisen Sie dann in Ihrem Code mit einer der beiden folgenden Methoden darauf:

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

oder

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

Das erste ist wahrscheinlich vorzuziehen, wenn Sie gegen Android M kompilieren. Das Thema, das Sie übergeben, kann jedoch null sein. Vielleicht ist das für Sie also einfacher?

Und wenn Sie die Compat-Bibliothek verwenden, können Sie so etwas tun

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

9
Warum muss für setTextColor getResources (). GetColor () anstelle der direkten Referenz R.color.errorColor verwendet werden? Die R.color.x funktioniert für fast jede andere Methode. Unglaublich frustrierend!
Zivilist

8
@Civilian: Da der für die setXXXColor () -Methoden erforderliche int-Parameter als der tatsächlich zu verwendende ARGB-Wert verwendet wird, NICHT als der Wert, der in der Ressourcendatei nachgeschlagen werden soll. Seltsamerweise hat die View-Klasse sowohl setBackgroundColor () als auch setBackgroundResource (), während TextView eine setTextResource () -Methode fehlt.
Ian Kemp

1
getColor(int)ist veraltet. ContextCompat.getColor(getContext(), R.color.yourColor);scheint der Ersatz zu sein.
RestInPeace

45

Und noch einer:

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

1
getResources()ist eine Kontextelementfunktion. Verwenden Sie für Adapter getContext().getResources(). Farbwerte sollten in Ressourcen eingehen, wie in der Antwort von @ xbakesx.
C0D3LIC1OU5

40

Sie können dies auch nur aus einer XML-Datei heraus tun.

Erstellen Sie eine color.xmlDatei im Werteordner:

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

</resources>

Dann können Sie in jeder XML-Datei die Farbe für Text festlegen, indem Sie:

android:textColor="@color/textbody"

Oder Sie können diese Farbe in einer Java-Datei verwenden:

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

27

Sie können verwenden

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

Sie können auch mit Transparenz festlegen, welche Farbe Sie möchten.

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

a für Alpha (transparent) Wert r-rot g-grün b-blau


15

Verwenden Sie den folgenden Code 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

Es gibt viele verschiedene Möglichkeiten, die Farbe in der Textansicht festzulegen.

  1. Farbwert in Studio Res-> Werte-> Farben.xml als hinzufügen

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

    Stellen Sie nun die Farbe in XML oder Aktivitätsklasse als ein

    text.setTextColor(getResources().getColor(R.color.color_purple)
  2. Wenn Sie einen Farbcode direkt angeben möchten, verwenden Sie den folgenden Color.parseColor-Code

    textView.setTextColor(Color.parseColor("#ffffff"));   
  3. Sie können auch RGB verwenden

    text.setTextColor(Color.rgb(200,0,0));
  4. Verwendung kann auch direkten Hexcode für textView verwenden. Sie können auch einfaches HEX einfügen, wie folgt:

    text.setTextColor(0xAARRGGBB);
  5. Sie können argb auch mit Alpha-Werten verwenden.

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

    a für Alpha (transparent) v.

  6. Und wenn Sie die Compat-Bibliothek verwenden, können Sie so etwas tun

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

9

Normalerweise mache ich das für alle Ansichten:

myTextView.setTextColor(0xAARRGGBB);

wo

  • AA definiert Alpha (00 für transparent, FF für undurchsichtig)

  • RRGGBB definiert den normalen HTML-Farbcode (wie FF0000 für Rot).


Und warum die Abwahl? Können Sie bitte einige Gedanken dazu hinzufügen?
AW

7

Wenn Sie setTextAppearance verwenden möchten , sollten Sie wissen, dass die Textfarbe mit dem vom Thema geerbten Stil überschrieben wird. Wenn Sie also beide verwenden möchten, stellen Sie die Farbe anschließend ein .

Das funktioniert:

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

Während dies dazu führt, dass Ihre Textfarbe beispielsweise weiß (für ein dunkles Thema) oder schwarz (für das helle Thema) ist:

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

Im Gegensatz dazu ist die Reihenfolge in XML beliebig.


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

In der colors.xmlDatei, schreiben Sie in dem folgenden Code:

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

6

Ich glaube, wenn Sie eine Farbe als Ressource (in der XML- Datei) angeben möchten , müssen Sie den ARGB- Wert angeben (nicht nur den RGB-Wert).

Versuchen Sie, Ihren Farbwert auf zu ändern #FFFF0000. Es sollte dir ROT geben.


Meiner Erfahrung nach stimmt das nicht und es ist möglich, einen RGB-Wert anstelle eines ARGB-Werts zu verwenden
slinden77

6

text.setTextColor(getResource().getColor(R.color.black)) Sie haben schwarze Farbe in color.xml erstellt.

ODER

text.setTextColor(Color.parseColor("#000000")) Geben Sie hier den gewünschten Hexcode ein

ODER

text.setTextColor(Color.BLACK) Sie können statische Farbfelder verwenden


5

Verwenden:

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

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

oder

myTextView.setTextColor(0xAARRGGBB);

4

Mit dem Adapter können Sie die Textfarbe mithilfe des folgenden Codes einstellen:

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"));

Der obige Code funktioniert auf meiner Seite. Hier textist eine Textansicht, in der die Farbe eingestellt werden muss.



2

Ab API 23 getResources().getColor()ist veraltet.

Verwenden Sie stattdessen Folgendes:

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

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

1

In Adapter können Sie die Textfarbe mithilfe des folgenden Codes festlegen:

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

1

Wenn Sie den Farbcode direkt angeben möchten, verwenden Sie

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

oder wenn Sie Farbcode aus dem Farbordner geben möchten, verwenden Sie

textView.setTextColor(R.color.white);

dieser Code textView.setTextColor (R.color.white); funktioniert nicht Sie könnten text.setTextColor (getResources (). GetColor (R.color.color_purple) verwenden, um die Farbe aus Ihrer color.xml zu erhalten
Gian Gomen

1

Es TextView.setTextColor(R.color.YOURCOLOR)reicht nicht aus , die Farbe einer Textansicht festzulegen !

Es muss so verwendet werden -

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

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

ODER

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


0

Ebenso benutzte ich color.xml:

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

Zum Einstellen des TextViewHintergrunds wie folgt:

textView.setTextColor(R.color.white);

Ich habe eine andere Farbe bekommen, aber als ich den folgenden Code verwendet habe, habe ich die tatsächliche Farbe bekommen.

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

0

Ich habe Folgendes getan: Erstellen Sie eine XML-Datei mit dem Namen Colors im Ordner res / values.

Meine 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>

Um diese Farben aus der XML-Datei zu erhalten, habe ich folgenden Code verwendet: valor ist eine Textansicht und ctx ist ein Kontextobjekt. Ich verwende es nicht von einer Aktivität, sondern von einem BaseAdapter zu einer ListView. Deshalb habe ich dieses Kontextobjekt verwendet.

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

Ich hoffe es hilft.


0

Zum Bereitstellen von RGB-Werten: text.setTextColor(Color.rgb(200,0,0));
Zum Parsen der Farbe von einem Hex-Wert: text.setTextColor(Color.parseColor("#FFFFFF"));


0

Wenn Sie sich in einem Adapter befinden und dennoch eine in Ressourcen definierte Farbe verwenden möchten, können Sie den folgenden Ansatz ausprobieren:

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 () ist veraltet

Versuchen Sie es also so:

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

0

Ich habe dies für eine Textansicht in einem ViewHolder für eine RecyclerView getan. Ich bin mir nicht sicher warum, aber es hat bei der ViewHolder-Initialisierung bei mir nicht funktioniert.

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

Aber als ich es in den onBindViewHolder verschoben habe, hat es gut funktioniert.

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

Hoffe das hilft jemandem.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.