Bagaimana cara mengatur warna teks dari TextView dalam kode?

544

Dalam XML, kita dapat mengatur warna teks berdasarkan textColoratribut, seperti android:textColor="#FF0000". Tapi bagaimana cara mengubahnya dengan coding?

Saya mencoba sesuatu seperti:

holder.text.setTextColor(R.color.Red);

Di mana holderhanya kelas dan texttipe TextView. Merah adalah nilai RGB (# FF0000) yang diatur dalam string.

Tapi itu menunjukkan warna berbeda daripada merah. Parameter apa yang bisa kita berikan di setTextColor ()? Dalam dokumentasi, katanya int, tetapi apakah itu nilai referensi sumber daya atau apa pun?

Vara
sumber
Catatan tentang tweaking UI dalam kode, harap pertimbangkan keuntungan melihat UI dalam waktu desain, meminimalkan perubahan runtime ke minimum.
AlikElzin-kilaka

Jawaban:

1245

Kamu harus menggunakan:

holder.text.setTextColor(Color.RED);

Anda dapat menggunakan berbagai fungsi dari Colorkelas untuk mendapatkan efek yang sama tentunya.

  • Color.parseColor (Manual) (seperti penggunaan LEX)

    text.setTextColor(Color.parseColor("#FFFFFF"));
  • Color.rgbdan Color.argb( Manual rgb ) ( Manual argb ) (seperti penggunaan Ganapathy)

    holder.text.setTextColor(Color.rgb(200,0,0));
    holder.text.setTextColor(Color.argb(0,200,0,0));
  • Dan tentu saja, jika Anda ingin menentukan warna dalam suatu XMLfile, Anda dapat melakukan ini:

    <color name="errorColor">#f00</color>

    karena getColor()fungsi ini sudah usang 1 , Anda harus menggunakannya seperti ini:

    ContextCompat.getColor(context, R.color.your_color);
  • Anda juga dapat menyisipkan HEX biasa, seperti:

    myTextView.setTextColor(0xAARRGGBB);

    Di mana Anda memiliki saluran alpha terlebih dahulu, lalu nilai warnanya.

Lihat manual lengkap tentu saja, Warna publik memperluas Objek .


1 Kode ini dulu juga ada di sini:

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

Metode ini sekarang tidak digunakan lagi di Android M. Namun Anda dapat menggunakannya dari contextCompat di pustaka dukungan , seperti yang ditunjukkan oleh contoh sekarang.

Nanne
sumber
2
Selain itu, jika teksnya adalah tautan, Anda harus menggunakan text.setLinkTextColor (...); dalam kode atau android: textColorLink = "..." dalam XML
WOUNDEDStevenJones
1
@Nanne Akan menyenangkan jika jawaban Anda juga menyebutkan bahwa R.color.XXX adalah referensi untuk warna. Berarti harus ditereferensi (seperti dalam contoh Anda), untuk kejelasan.
nyaray
Saya tidak yakin apa yang Anda maksud? Seperti di, dereferenced dan jadi akan menggunakan lebih banyak sumber daya atau maksud Anda sesuatu yang lain?
Nanne
Apakah ada cara untuk mengetahui apakah nilai warna tertentu akan membiarkan teks menghilang?
Christopher Masser
6
getColor(int)sudah ditinggalkan.
RestInPeace
137

Jika Anda masih ingin menentukan warna di file XML Anda:

<color name="errorColor">#f00</color>

Kemudian rujuk dalam kode Anda dengan salah satu dari dua metode ini:

textView.setTextColor(getResources().getColor(R.color.errorColor, getResources().newTheme()));    

atau

textView.setTextColor(getResources().getColor(R.color.errorColor, null));

Yang pertama mungkin lebih disukai jika Anda mengompilasi melawan Android M, namun tema yang Anda berikan bisa nol, jadi mungkin itu lebih mudah bagi Anda?

Dan jika Anda menggunakan perpustakaan Compat Anda dapat melakukan sesuatu seperti ini

textView.setTextColor(ContextCompat.getColor(context, R.color.errorColor));
xbakesx
sumber
9
Untuk setTextColor, mengapa harus mengambil getResources (). GetColor () daripada referensi langsung R.color.errorColor? R.color.x bekerja untuk hampir setiap metode lainnya. Sangat membuat frustrasi!
Sipil
8
@Civilian: karena parameter int yang diperlukan oleh metode setXXXColor () diambil sebagai nilai ARGB yang sebenarnya untuk digunakan, BUKAN nilai untuk pencarian dalam file sumber daya. Anehnya, kelas View memiliki setBackgroundColor () dan setBackgroundResource (), sementara TextView tidak memiliki metode setTextResource ().
Ian Kemp
1
getColor(int)sudah ditinggalkan. ContextCompat.getColor(getContext(), R.color.yourColor);tampaknya menjadi penggantinya.
RestInPeace
45

Dan satu lagi:

TextView text = (TextView) findViewById(R.id.text);
text.setTextColor(Color.parseColor("#FFFFFF"));
LEX
sumber
1
getResources()adalah fungsi anggota Konteks. Untuk adaptor, gunakan getContext().getResources(). Nilai warna harus masuk ke sumber daya, seperti dalam jawaban @ xbakesx.
C0D3LIC1OU5
40

Anda dapat melakukan ini hanya dari file XML juga.

Buat color.xmlfile di folder nilai:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="textbody">#ffcc33</color>

</resources>

Kemudian dalam file XML apa pun, Anda dapat mengatur warna untuk teks menggunakan,

android:textColor="@color/textbody"

Atau Anda dapat menggunakan warna ini dalam file Java:

final TextView tvchange12 = (TextView) findViewById(R.id.textView2);
//Set color for textbody from color.xml file
tvchange1.setTextColor(getResources().getColor(R.color.textbody));
hari baru
sumber
27

Kamu bisa menggunakan

holder.text.setTextColor(Color.rgb(200,0,0));

Anda juga dapat menentukan warna apa yang Anda inginkan dengan Transparansi.

holder.text.setTextColor(Color.argb(0,200,0,0));

a untuk nilai Alpha (Transparan) r-red g-green b-blue

Ganapathy C
sumber
15

gunakan kode berikut di layout.xml

<TextView  android:id="@+id/textView1"    
android:layout_width="wrap_content"    
android:layout_height="wrap_content" 
android:text="@string/add"
android:layout_marginTop="16dp"
android:textAppearance="?
android:attr/textAppearanceMedium"
android:textColor="#25383C"
android:textSize="13sp" />

<TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/add"
        android:layout_marginTop="16dp"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:textColor="#25383C"
        android:textSize="13sp" />
Chinna
sumber
15

Ada banyak cara berbeda untuk mengatur warna pada tampilan teks.

  1. Tambahkan nilai warna di studio res-> values-> colors.xml as

    <color name="color_purple">#800080</color>

    Sekarang atur warna dalam xml atau kelas actvity sebagai

    text.setTextColor(getResources().getColor(R.color.color_purple)
  2. Jika Anda ingin memberikan kode warna langsung gunakan di bawah ini kode Color.parseColor

    textView.setTextColor(Color.parseColor("#ffffff"));   
  3. Anda juga dapat menggunakan RGB

    text.setTextColor(Color.rgb(200,0,0));
  4. Gunakan juga dapat menggunakan hexcode langsung untuk textView. Anda juga dapat menyisipkan HEX biasa, seperti:

    text.setTextColor(0xAARRGGBB);
  5. Anda juga dapat menggunakan argb dengan nilai alpha.

       text.setTextColor(Color.argb(0,200,0,0));

    a untuk Alpha (Transparan) v.

  6. Dan jika Anda menggunakan perpustakaan Compat Anda dapat melakukan sesuatu seperti ini

       text.setTextColor(ContextCompat.getColor(context, R.color.color_purple));
Pangkat
sumber
9

Saya biasanya melakukan ini untuk setiap tampilan:

myTextView.setTextColor(0xAARRGGBB);

dimana

  • AA mendefinisikan alfa (00 untuk transparan, FF untuk opak)

  • RRGGBB mendefinisikan kode warna HTML normal (seperti FF0000 untuk merah).

AW
sumber
Dan mengapa down-vote? Bisakah Anda menambahkan beberapa pemikiran tentang ini?
AW
7

Jika Anda berencana untuk menggunakan setTextAppearance, Anda harus tahu bahwa itu akan menimpa warna teks dengan gaya yang diwarisi dari tema. Jadi jika Anda ingin menggunakan keduanya, atur warnanya sesudahnya .

Ini bekerja:

textView.setTextAppearance(context, android.R.style.TextAppearance_Medium);
textView.setTextColor(Color.RED);

Meskipun ini akan menyebabkan warna teks Anda misalnya putih (untuk tema gelap) atau hitam (untuk tema terang):

textView.setTextColor(Color.RED);
textView.setTextAppearance(context, android.R.style.TextAppearance_Medium);

Bertentangan dengan ini dalam XML, urutannya arbitrer.

Robin Gawenda
sumber
7
textView.setTextColor(ContextCompat.getColor(getApplicationC‌​ontext(),R.color.col‌​orWhite)); 

Dalam colors.xmlfile tersebut, tulis kode berikut:

<color name="colorWhite">#FFFFFF</color>
Kaushik Chatterjee
sumber
6

Saya percaya bahwa jika Anda ingin menentukan warna sebagai sumber daya (dalam file XML ), Anda harus memberikan nilai ARGB -nya (bukan hanya nilai RGB).

Coba ubah nilai warna Anda menjadi #FFFF0000. Seharusnya memberi Anda MERAH.

Arnab Chakraborty
sumber
menurut pengalaman saya, itu tidak benar dan dimungkinkan untuk menggunakan nilai RGB alih-alih nilai ARGB
slinden77
6

text.setTextColor(getResource().getColor(R.color.black)) Anda telah membuat warna hitam di color.xml.

ATAU

text.setTextColor(Color.parseColor("#000000")) di sini ketik hexcode yang diinginkan

ATAU

text.setTextColor(Color.BLACK) Anda dapat menggunakan bidang warna statis

Nitish
sumber
5

Menggunakan:

TextView tv = new TextView(this);
tv.setTextColor(Color.rgb(285,0,0));
Talha
sumber
5
holder.text.setTextColor(Color.rgb(200,0,0));

atau

myTextView.setTextColor(0xAARRGGBB);
Yash Patil
sumber
4

Menggunakan Adaptor Anda dapat mengatur warna teks dengan menggunakan kode ini:

holder.text_view = (TextView) convertView.findViewById(R.id.text_view);
holder.text_view.setTextColor(Color.parseColor("#FF00FF"));
Hiren Patel
sumber
4
TextView text = new TextView(context);
text.setTextColor(Color.parseColor("any hex value of a color"));

Kode di atas bekerja di pihak saya. Berikut textini adalah TextView yang warna perlu diatur.

Teknologi Evon
sumber
2

Dari API 23 dan seterusnya, getResources().getColor()sudah usang.

Gunakan ini sebagai gantinya:

textView.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.color_black));
PJ2104
sumber
1
   textViewStatus.setTextColor(res.getColor(R.color.green));
zudo1337
sumber
1

Di Adaptor Anda dapat mengatur warna teks dengan menggunakan kode ini:

holder.my_text_view = (TextView) convertView.findViewById(R.id.my_text_view);
holder.my_text_view.setTextColor(Color.parseColor("#FFFFFF"));
Peter Mortensen
sumber
1

jika Anda ingin memberikan kode warna secara langsung maka gunakan

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

atau jika Anda ingin memberikan kode warna dari folder warna kemudian gunakan

textView.setTextColor(R.color.white);
reshma
sumber
kode ini textView.setTextColor (R.color.white); tidak bekerja Anda dapat menggunakan text.setTextColor (getResources (). GetColor (R.color.color_purple) untuk mendapatkan warna dari color.xml Anda
Gian Gomen
1

Untuk mengatur warna TextView, TextView.setTextColor(R.color.YOURCOLOR)tidak cukup!

Itu harus digunakan seperti ini -

TextView myText = (TextView) findViewById(R.id.YoutTextViewID);

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

ATAU

myText.setTextColor(Color.parseColor("#54D66A"));
IntelliJ Amiya
sumber
1
holder.userType.setTextColor(context.getResources().getColor(
                    R.color.green));
Harish Gyanani
sumber
0

Demikian pula, saya menggunakan color.xml:

<color name="white">#ffffff</color>
    <color name="black">#000000</color>   

Untuk mengatur TextViewlatar belakang seperti:

textView.setTextColor(R.color.white);

Saya mendapatkan warna yang berbeda, tetapi ketika saya menggunakan kode di bawah ini saya mendapatkan warna yang sebenarnya.

textView.setTextColor(Color.parseColor("#ff6363"));
Raj Sharma
sumber
0

Saya melakukan cara ini: Membuat file XML, yang disebut Warna di folder res / values.

My Colors.xml:

    <?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="vermelho_debito">#cc0000</color>
    <color name="azul_credito">#4c4cff</color>
    <color name="preto_bloqueado">#000000</color>
    <color name="verde_claro_fundo_lista">#CFDBC5</color>
    <color name="branco">#ffffff</color>
    <color name="amarelo_corrige">#cccc00</color>
    <color name="verde_confirma">#66b266</color>
</resources>

Untuk mendapatkan warna ini dari file xml, saya telah menggunakan kode ini: valor itu adalah TextView, dan ctx itu adalah objek Konteks. Saya tidak menggunakannya dari Aktivitas, tetapi BaseAdapter ke ListView. Itu sebabnya saya menggunakan Objek Konteks ini.

valor.setTextColor(ctx.getResources().getColor(R.color.azul_credito));

Semoga ini bisa membantu.

Cristiano Guerra
sumber
0

Untuk memberikan nilai rgb: text.setTextColor(Color.rgb(200,0,0));
Untuk parsing warna dari nilai hex: text.setTextColor(Color.parseColor("#FFFFFF"));

Kawan
sumber
0

Jika Anda menggunakan adaptor dan masih ingin menggunakan warna yang ditentukan dalam sumber daya, Anda dapat mencoba pendekatan berikut:

holder.text.setTextColor(holder.text.getContext().getResources().getColor(R.color.myRed));
Aleks Nine
sumber
0
TextView textresult = (TextView)findViewById(R.id.textView1);
textresult.setTextColor(Color.GREEN);
HUBUNGI19
sumber
0

getColor () tidak digunakan lagi

Jadi cobalah cara ini:

 tv_title.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.sf_white));
kgandroid
sumber
0

Saya melakukan ini untuk TextView di ViewHolder untuk RecyclerView. Saya tidak begitu yakin mengapa, tetapi itu tidak berhasil bagi saya dalam inisialisasi ViewHolder.

public ViewHolder(View itemView) {
    super(itemView);
    textView = (TextView) itemView.findViewById(R.id.text_view);
    textView.setTextColor(context.getResources().getColor(R.color.myColor));
    // Other stuff
}

Tetapi ketika saya memindahkannya ke onBindViewHolder, itu berfungsi dengan baik.

public void onBindViewHolder(ViewHolder holder, int position){
    // Other stuff
    holder.textView.setTextColor(context.getResources().getColor(R.color.myColor));
}

Semoga ini bisa membantu seseorang.

YesayaJ
sumber