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

Jawaban:


333

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


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.


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

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).


10

Hanya 1 baris kode ini yang mengubah latar program

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

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 :)


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

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


3

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


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

2

Jika Anda ingin mendukung semua versi: Coba ini:

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

1

Hanya digunakan

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

-10

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


Secara terprogram ... bukan xml
aLL
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.