TextView setTextColor () funktioniert nicht

73

Ich erstelle programmgesteuert eine Liste (keine ListView, füge sie nur dem übergeordneten Element hinzu) solcher Elemente:

    <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" 
    android:orientation="vertical" android:layout_weight="1">
    <TextView android:id="@+id/filiale_name"
    android:layout_width="fill_parent" android:layout_height="wrap_content"/>
    <TextView android:id="@+id/lagerstand_text"
    android:layout_width="fill_parent" android:layout_height="wrap_content"
    android:textSize="10sp" android:textColor="@color/red"/>
</LinearLayout>

Außerdem habe ich einige Farben in values ​​/ color.xml definiert. Wie Sie sehen, hat die Textansicht mit der ID "lagerstand_text" ihre Farbe standardmäßig auf rot gesetzt. Das funktioniert.

Beim Erstellen der Elemente in Java mache ich das

lagerstandText.setText("bla");

und für einige Elemente auch

lagerstandText.setTextColor(R.color.red);

und andere Farben. Während die Elemente, für die ich setTextColor () nicht aufrufe, rot sind, sind alle anderen grau, egal welche Farbe ich gewählt habe (auch wenn es wieder dasselbe Rot ist).

Warum das?

didi_X8
quelle

Antworten:

219

Die Dokumentation ist diesbezüglich nicht sehr ausführlich, aber Sie können beim Aufruf nicht nur die Ganzzahl R.color verwenden setTextColor. Sie müssen anrufen getResources().getColor(R.color.YOURCOLOR), um eine Farbe richtig einzustellen.

Verwenden Sie Folgendes, um die Farbe Ihres Textes programmgesteuert festzulegen:

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

Ab der Support-Bibliothek 23 müssen Sie den folgenden Code verwenden, da getColor veraltet ist:

textView.setTextColor(ContextCompat.getColor(context, R.color.YOURCOLOR));
Sunil Kumar Sahoo
quelle
2
Ok, das funktioniert. Die API-Dokumentation könnte in diesem Fall etwas ausführlicher sein ...
didi_X8
13
Sie können auch Farbe verwenden. (hier rot grün schwarz blau gelb und andere) setTextColor (Color.RED)
Peter
Danke für die Info ... aber dieses getResources () lässt mich eine Kette von Kontexten passieren. Es sollte einen besseren Weg geben, auf globale Ressourcen zuzugreifen.
Umair
@Umair Verwenden Sie eine statische Variable für Ihre Anwendungsklasse.
Kontinuität
@Kontinuity, ich habe gelesen, dass das Beibehalten des Kontexts in statischen Variablen eine große Quelle für Speicherverluste ist.
Umair
32

Es gibt also viele Möglichkeiten, diese Aufgabe zu erfüllen.

1.

int color = Integer.parseInt("bdbdbd", 16)+0xFF000000;
textview.setTextColor(color);

2.

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

3.

textView.setTextColor(0xffbdbdbd);

4.

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

5.

textView.setTextColor(Color.argb(a_int, r_int, g_int, b_int));
Duggu
quelle
Gibt es eine Möglichkeit herauszufinden, ob ein bestimmter Farbwert den Text verschwinden lässt?
Christopher Masser
Ich passe die Helligkeit der Farbe an, bevor ich setTextColor (Farbe) verwende. In einigen unbekannten Fällen verschwindet die Textansicht einfach auf dem Gerät (unabhängig vom Hintergrund). Ich möchte eine Testfunktion schreiben, um zu überprüfen, ob "Farbe" ein gültiger Farbwert ist, bevor ich ihn in setTextColor (Farbe) verwende.
Christopher Masser
@ ChristopherMasser versucht nichts, was du gesagt hast?
Duggu
2

1. Standardfarbe u bevorzugen Sie bitte mit unten gehen.

textview.setTextColor(Color.select_color)

2.Wo Sie custwom color verwenden möchten, fügen Sie es in die Datei color.xml ein

textview.setTextColor(getResources().getColor(R.color.textbody));

oder

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

oder

subText.setTextColor(Color.rgb(255,192,0));
sneha v
quelle
1

Zum späteren Nachschlagen können Sie Folgendes verwenden:

String color = getString(Integer.parseInt(String.valueOf(R.color.my_color)));
my_textView.setTextColor(Color.parseColor(color));

Auf diese Weise können Sie Ihre Farbressourcen nutzen.

Chad Mx
quelle
0

Die Ganzzahl - ID für eine bestimmte Farbe (in XML - Layout definiert) in definierten RKlasse kann nicht als Parameter übergeben wird setTextColor()Verfahren zur ViewKlasse. Sie müssen den Parameter von setTextColor()durch die folgende Codezeile erhalten:

int para=getResources().getColor(R.color.your_color,null);
view.setTextColor(para,null);

Die Methode getColor(int id)wurde abgeschrieben ... stattdessen getColor(int id,Resources.Theme theme)wie in der obigen Codezeile verwenden.

The `second parameter( theme )` can be null
Abhi
quelle