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

Antworten:

332

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

bhatt4982
quelle
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.

Seb DA ROCHA
quelle
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);
Dmitry
quelle
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).

badMonkey
quelle
10

Nur diese eine Codezeile veränderte den Hintergrund programmgesteuert

tv.setBackgroundColor(Color.parseColor("#808080"));
Vivek Warde
quelle
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 :)

user1252459
quelle
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
Dharmx
quelle
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);
Sahil Sharma
quelle
4
tv.setTextColor(getResources().getColor(R.color.solid_red));
Yash Patil
quelle
3

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

Siddharth
quelle
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"));
Hamad
quelle
2

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

myTextView.setBackgroundColor(ContextCompat.getColor(this,R.color.mycolor)); 
Mladen Rakonjac
quelle
1

Jut verwenden

ArrayAdapter<String> adaptername = new ArrayAdapter<String>(this,
            android.R.layout.simple_dropdown_item_1line, your array list);
Pavan Anadkat
quelle
-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.

Richa
quelle
Programmatisch ... nicht xml
aLL