android TextView: mengatur warna latar belakang secara dinamis tidak berfungsi

169

Mengatur warna latar belakang secara terprogram dari sebuah android TextViewsepertinya tidak berfungsi. Saya saya melewatkan sesuatu!

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

Saya juga punya file ini (colors.xml) di folder res / values ​​saya

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

[EDIT]: Selain itu, pengaturan warna teks menyebabkan TextView menghilang.

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

Jawaban:

333

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

bhatt4982
sumber
5
API Android benar-benar sesuatu, mengapa tidak bisa membuat kesalahan?
Tawani
53
Karena itu bukan kesalahan. setBackgroundColor () mengambil warna dalam bentuk numerik (mis., 0xFFFF0000 untuk merah). R.color.white juga merupakan angka.
CommonsWare
6
Doh! Ini pasti bisa dilakukan lebih baik dengan enum daripada int di mana-mana. Terima kasih atas jawabannya.
Wojciech Górski
2
Mereka bisa menggunakan tanda tangan tipe berbeda! Satu disebut ColorId dan yang lain disebut HexColor atau sesuatu. Keduanya bilangan bulat tetapi tidak bertipe
1
Sangat aneh. Dari dokumentasi: Sumber daya harus merujuk ke objek Drawable atau 0 untuk menghapus latar belakang.
Artem
73

Coba ini:

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

Saya setuju bahwa warna dan sumber daya memiliki jenis yang sama, tetapi saya juga menghabiskan beberapa jam untuk menemukan solusi ini.

Seb DA ROCHA
sumber
2
Saya tidak sepenuhnya memahaminya sekarang (melihat ke atas api doc) tetapi itu berhasil, jadi terima kasih!
CodeJustin.com
Terima kasih, Anda telah menyelamatkan saya beberapa jam! Sekarang saya tahu solusinya, itu masuk akal bagi saya, tetapi saya yakin itu akan membutuhkan waktu beberapa jam untuk memecahkannya sendiri.
FreewheelNat
Terima kasih. API Android terkadang sangat tidak intuitif.
suDocker
64

Untuk mengatur warna merah:

textView.setBackgroundColor(0xfff00000);

Atau

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

textView.setBackgroundResource(R.color.solid_red);
Dmitry
sumber
1
Untuk menggemakan jawaban badMonkey mengingat ini adalah jawaban yang lebih populer, Anda HARUS mengatur bit orde tinggi menjadi bukan nol untuk transparansi. Saya terjebak sepanjang waktu dengan menentukan RGB tanpa A. Untuk mengatur latar belakang menjadi biru murni, gunakan 0xff0000ff, bukan 0x0000ff atau tidak akan berhasil.
JohnnyLambada
Dalam .xml, nilai elemen <color> hanya berfungsi dengan 6 digit klasik: # FF0000
Weapon X
@WeaponX: berfungsi baik dengan warna transparan (dalam 8 digit).
CoolMind
@ Windows X Fungsi ini mengambil integer, 4 byte. 6 digit hex adalah 3 byte.
20

Saya memiliki masalah serupa di mana saya membuat warna numerik tanpa mempertimbangkan saluran alfa terkemuka. yaitu. mytext.setTextColor(0xFF0000)(Berpikir ini akan menjadi merah). Meskipun ini adalah warna merah, ia juga 100% transparan karena it = 0x00FF0000; nilai opak 100% yang benar adalah 0xFFFF0000atau mytext.setTextcolor(0xFFFF0000).

badMonkey
sumber
10

Hanya 1 baris kode ini yang mengubah latar program

tv.setBackgroundColor(Color.parseColor("#808080"));
Vivek Warde
sumber
8

Yah saya mengalami situasi ketika layanan web mengembalikan warna dalam format hex seperti "# CC2233" dan saya ingin meletakkan warna ini pada textView dengan menggunakan setBackGroundColor (), jadi saya menggunakan kelas Warna android untuk mendapatkan nilai int dari string hex dan meneruskannya ke fungsi yang disebutkan. Semuanya berhasil. Ini adalah contoh:

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

PS memposting jawaban ini karena solusi lain tidak berhasil untuk saya. Saya harap ini akan membantu seseorang :)

pengguna1252459
sumber
5

di sini ada sedikit detail,

jika Anda dalam aktivitas gunakan ini

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

jika Anda berada dalam fragmen, gunakan kode di bawah ini

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

jika Anda menggunakan adaptor recyclerview di bawah kode

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

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

Berikut langkah-langkah untuk melakukannya dengan benar:

  1. Pertama-tama, nyatakan instance TextView di MainActivity.java Anda sebagai berikut:

    TextView mTextView;
  2. Tetapkan beberapa teks SECARA DINAMIS (jika Anda mau) sebagai berikut:

    mTextView.setText("some_text");
  3. Sekarang, untuk mengatur warna latar belakang, Anda perlu menentukan warna Anda sendiri di file res-> values-> colors.xml sebagai berikut:

    <resources>
        <color name="my_color">#000000</color>
    </resources>
  4. Anda sekarang dapat menggunakan warna "my_color" di file java Anda untuk mengatur latar belakang secara dinamis sebagai berikut:

    mTextView.setBackgroundResource(R.color.my_color);
Sahil Sharma
sumber
4
tv.setTextColor(getResources().getColor(R.color.solid_red));
Yash Patil
sumber
3

Color.parseHexColor("17ee27")tidak bekerja untuk saya, malah Color.parseColor("17ee27")bekerja dengan sempurna.

Siddharth
sumber
2

dua cara untuk melakukan itu:

1. buat warna dalam file colors.xml seperti:

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

dan menggunakannya dalam aktivitas java class sebagai:

et.setBackgroundResource(R.color.white);

2.

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

Jika Anda ingin mendukung semua versi: Coba ini:

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

Hanya digunakan

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

Anda dapat menggunakan android:textColor= "warna teks apa pun yang ingin Anda berikan "dalam file xml tempat tampilan teks Anda dinyatakan.

Richa
sumber
Secara terprogram ... bukan xml
aLL