android TextView: Das dynamische Einstellen der Hintergrundfarbe funktioniert nicht


169

Das programmgesteuerte Einstellen der Hintergrundfarbe eines Android TextViewscheint nicht zu funktionieren. Mir fehlt etwas!

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

Ich habe auch diese Datei (colours.xml) in meinem Ordner res / values

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

[BEARBEITEN]: Wenn Sie die Textfarbe einstellen, verschwindet die Textansicht.

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

Antworten:


332

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


5
Die Android-API ist wirklich etwas, warum konnte sie keinen Fehler auslösen?
Tawani

53
Weil es kein Fehler ist. setBackgroundColor () nimmt eine Farbe in numerischer Form an (z. B. 0xFFFF0000 für Rot). R.color.white ist auch eine Zahl.
CommonsWare

6
D'oh! Dies hätte definitiv besser mit Aufzählungen als mit allgegenwärtigen Ints gemacht werden können. Danke für die Antwort.
Wojciech Górski

2
Sie könnten unterschiedliche Typensignaturen verwenden! Eine namens ColorId und eine andere namens HexColor oder so. Beide sind ganze Zahlen, aber sie sind nicht vom gleichen Typ

1
Sehr eigenartig. Aus der Dokumentation: Die Ressource sollte sich auf ein Drawable- Objekt oder 0 beziehen , um den Hintergrund zu entfernen.
Artem

73

Versuche dies:

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

Ich bin damit einverstanden, dass eine Farbe und eine Ressource denselben Typ haben, aber ich verbringe auch einige Stunden damit, diese Lösung zu finden.


2
Ich verstehe es momentan nicht ganz (siehe API-Dokumente), aber es funktioniert, also danke!
CodeJustin.com

Danke, du hast mir ein paar Stunden gespart! Jetzt, wo ich die Lösung kenne, macht es für mich Sinn, aber ich bin sicher, ich hätte ein paar Stunden gebraucht, um das selbst herauszufinden.
FreilaufNat

Vielen Dank. Die Android-API ist manchmal wirklich nicht intuitiv.
suDocker

64

So stellen Sie die rote Farbe ein:

textView.setBackgroundColor(0xfff00000);

Oder

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

textView.setBackgroundResource(R.color.solid_red);

1
Um die Antwort von badMonkey wiederzugeben, da dies die beliebteste Antwort ist, MÜSSEN Sie die höherwertigen Bits für die Transparenz auf ungleich Null setzen. Ich werde die ganze Zeit erwischt, wenn ich das RGB ohne A spezifiziere. Um den Hintergrund auf reines Blau einzustellen, verwenden Sie 0xff0000ff, nicht 0x0000ff, sonst funktioniert es nicht.
Johnny Lambada

In der .xml funktioniert der Wert eines <color> -Elements nur mit den klassischen 6 Ziffern: # FF0000
Waffe X

@ WeaponX: Es funktioniert gut mit transparenten Farben (in 8 Ziffern).
CoolMind

@ Weapn X Die Funktion benötigt eine Ganzzahl von 4 Bytes. 6 hexadezimale Ziffern sind 3 Bytes.

20

Ich hatte ein ähnliches Problem, bei dem ich eine numerische Farbe ohne Berücksichtigung des führenden Alphakanals erstellte. dh. mytext.setTextColor(0xFF0000)(Ich denke, das wäre rot). Während dies eine rote Farbe ist, ist sie auch 100% transparent, da it = 0x00FF0000; der korrekte 100% opake Wert 0xFFFF0000oder ist mytext.setTextcolor(0xFFFF0000).


10

Nur diese eine Codezeile veränderte den Hintergrund programmgesteuert

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

8

Nun, ich hatte eine Situation, in der der Webdienst eine Farbe im Hex-Format wie "# CC2233" zurückgab und diese Farbe mithilfe von setBackGroundColor () in textView einfügen wollte. Daher habe ich die Android-Farbklasse verwendet, um den int-Wert der Hex-Zeichenfolge abzurufen und an diesen zu übergeben erwähnte Funktion. Alles hat funktioniert. Dies ist ein Beispiel:

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

PS hat diese Antwort gepostet, weil andere Lösungen für mich nicht funktionierten. Ich hoffe das hilft jemandem :)


5

hier ist im Detail,

Wenn Sie in Aktivität sind, verwenden Sie diese

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

Wenn Sie sich in einem Fragment befinden, verwenden Sie den folgenden Code

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

Wenn Sie sich im Recyclerview-Adapter befinden, verwenden Sie den folgenden Code

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

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

4

Hier sind die Schritte, um es richtig zu machen:

  1. Deklarieren Sie zunächst eine Instanz von TextView in Ihrer MainActivity.java wie folgt:

    TextView mTextView;
  2. Stellen Sie einen Text DYNAMISCH (wenn Sie möchten) wie folgt ein:

    mTextView.setText("some_text");
  3. Um die Hintergrundfarbe festzulegen, müssen Sie nun Ihre eigene Farbe in der Datei res-> values-> colours.xml wie folgt definieren:

    <resources>
        <color name="my_color">#000000</color>
    </resources>
  4. Sie können jetzt die Farbe "my_color" in Ihrer Java-Datei verwenden, um den Hintergrund wie folgt dynamisch festzulegen:

    mTextView.setBackgroundResource(R.color.my_color);


3

Color.parseHexColor("17ee27")hat bei mir nicht funktioniert, sondern Color.parseColor("17ee27")perfekt funktioniert.


2

zwei Möglichkeiten, dies zu tun:

1.Erstellen Sie Farbe in der Datei colours.xml wie folgt:

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

und verwenden Sie es int Aktivität Java-Klasse als:

et.setBackgroundResource(R.color.white);

2.

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

2

Wenn Sie alle Versionen unterstützen möchten: Versuchen Sie Folgendes:

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

1

Jut verwenden

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

-10

Sie können android:textColor= "jede beliebige Textfarbe verwenden, die Sie in einer XML-Datei angeben möchten, in der Ihre Textansicht deklariert ist.


Programmatisch ... nicht xml
aLL
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.