Jangan lupa untuk melarikan diri menggunakan input pengguna Html.escapeHtml(str).
kelunik
1
Ditambahkan dalam api level 1
2red13
3
Hanya sebuah peringatan. Saya mengalami masalah ketika saya membutuhkan teks saya dalam huruf besar. Saya menggunakan android: textAllCaps = "true" dalam XML dan, pada saat yang sama, memiliki konten HTML saya dalam huruf besar. Itu tidak bekerja. Saya menghapus atribut XML dan sekarang berfungsi dengan baik. Hati-hati, karena jika Anda menggunakan setAllCaps () dalam kode, masalah yang sama akan muncul.
Hebat, terima kasih, juga bisa melakukan BackgroundColorSpan. ada kesalahan ketik kecil dalam contoh Anda, WordToSpan dan WordtoSpan, catat kasusnya di To
Tidak berfungsi untuk saya mendapatkan `java.lang.StringIndexOutOfBoundsException: length = 3; index = 12`
Muhammad Babar
1
StringIndexOutOfBoundsException sendiri jelas. Anda mengakses string yang melebihi panjangnya.
Swapnil Kotwal
1
String saya tidak diperbaiki, sehingga string akan dihasilkan pada saat aplikasi dijalankan. Saya sudah mencoba hampir semua jawaban dari pertanyaan ini. Tetapi hanya solusi ini yang bekerja untuk saya.
Md. Sabbir Ahmed
33
Anda dapat menggunakan Spannableuntuk menerapkan efek ke TextView:
Berikut adalah contoh saya untuk mewarnai hanya bagian pertama dari sebuah TextViewteks (sambil memungkinkan Anda untuk mengatur warna secara dinamis daripada mengkodekannya menjadi String seperti pada contoh HTML!)
mTextView.setText("Red text is here",BufferType.SPANNABLE);Spannable span =(Spannable) mTextView.getText();
span.setSpan(newForegroundColorSpan(0xFFFF0000),0,"Red".length(),Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
Dalam contoh ini Anda dapat mengganti 0xFFFF0000 dengan a getResources().getColor(R.color.red)
TextView textView=(TextView)findViewById(R.id.yourTextView);//init//here I am appending two string into my textView with two diff colors.//I have done from fragment so I used here getActivity(), //If you are trying it from Activity then pass className.this or this;
textView.append(TextViewUtils.getColoredString(getString(R.string.preString),ContextCompat.getColor(getActivity(),R.color.firstColor)));
textView.append(TextViewUtils.getColoredString(getString(R.string.postString),ContextCompat.getColor(getActivity(),R.color.secondColor)));
Di dalam kelas TextViewUtils Anda menambahkan metode ini
/***
*
* @param mString this will setup to your textView
* @param colorId text will fill with this color.
* @return string with color, it will append to textView.
*/publicstaticSpannable getColoredString(String mString,int colorId){Spannable spannable =newSpannableString(mString);
spannable.setSpan(newForegroundColorSpan(colorId),0, spannable.length(),Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);Log.d(TAG,spannable.toString());return spannable;}
Saya baru saja memperbarui, periksa sekali, ini berfungsi untuk saya.
Abdul Rizwan
Myabe Anda menggunakan Html.fromHtml untuk menggunakan string ini?
Sergey Shustikov
di dalam file string.xml saya telah membuat variabel dan mengatur ini, itu berfungsi untuk saya sekarang saya melakukan ini, bisa tolong beri string Anda di sini.
Abdul Rizwan
5
Lebih baik menggunakan string dalam file string, karena itu:
<stringname="some_text">
<![CDATA[
normal color <fontcolor=\'#06a7eb\'>special color</font>]]>
</string>
Saya telah menulis beberapa kode untuk pertanyaan lain yang mirip dengan yang satu ini, tetapi pertanyaan itu digandakan jadi saya tidak bisa menjawabnya di sana jadi saya hanya meletakkan kode saya di sini jika seseorang mencari persyaratan yang sama.
Ini bukan kode yang sepenuhnya berfungsi, Anda perlu membuat beberapa perubahan kecil untuk membuatnya berfungsi.
Ini kodenya:
Saya telah menggunakan gagasan @Graeme tentang penggunaan teks yang dapat dipindai.
String colorfulText ="colorfulText";Spannable span =newSpannableString(colorfulText);for(int i =0, len = colorfulText.length(); i < len; i++){
span.setSpan(newForegroundColorSpan(getRandomColor()), i, i+1,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);}((TextView)findViewById(R.id.txtSplashscreenCopywrite)).setText(span);
Gunakan kelas SpannableBuilder alih-alih pemformatan HTML jika memungkinkan karena lebih cepat daripada parsing format HTML. Lihat tolok ukur saya sendiri "SpannableBuilder vs HTML" di Github
Terima kasih!
Jawaban yang luar biasa! Saya bisa menggunakan Spannable untuk membangun teks berwarna pelangi (jadi ini bisa diulang untuk setiap array warna). Inilah metode saya, jika itu membantu siapa pun:
privateSpannable buildRainbowText(String pack_name){int[] colors =newint[]{Color.RED,0xFFFF9933,Color.YELLOW,Color.GREEN,Color.BLUE,Color.RED,0xFFFF9933,Color.YELLOW,Color.GREEN,Color.BLUE,Color.RED,0xFFFF9933,Color.YELLOW,Color.GREEN,Color.BLUE,Color.RED,0xFFFF9933,Color.YELLOW,Color.GREEN,Color.BLUE};Spannable word =newSpannableString(pack_name);for(int i =0; i < word.length(); i++){
word.setSpan(newForegroundColorSpan(colors[i]), i, i+1,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);}return word;}
Dan kemudian saya hanya setText (buildRainboxText (pack_name)); Perhatikan bahwa semua kata yang saya masukkan di bawah 15 karakter dan ini hanya mengulangi 5 warna 3 kali - Anda ingin menyesuaikan warna / panjang array untuk penggunaan Anda!
Karena API 24 Anda memiliki FROM_HTML_OPTION_USE_CSS_COLORS sehingga Anda dapat menentukan warna dalam CSS alih-alih mengulanginya sepanjang waktu dengan font color="
Jauh lebih jelas - ketika Anda memiliki beberapa html dan Anda ingin menyorot beberapa tag yang telah ditentukan - Anda hanya perlu menambahkan fragmen CSS di atas html Anda
Jawaban:
ya, jika Anda memformat properti
String
withhtml
'sfont-color
kemudian meneruskannya ke metodeHtml.fromHtml(your text here)
sumber
Html.escapeHtml(str)
.Html.fromHtml(String)
sekarang sudah ditinggalkan, alih-alih gunakanHtml.fromHtml(String, Html.FROM_HTML_MODE_LEGACY)
. Informasi lebih lanjut dapat ditemukan di sini.Anda dapat mencetak garis dengan banyak warna tanpa HTML sebagai:
sumber
Anda dapat menggunakan
Spannable
untuk menerapkan efek keTextView
:Berikut adalah contoh saya untuk mewarnai hanya bagian pertama dari sebuah
TextView
teks (sambil memungkinkan Anda untuk mengatur warna secara dinamis daripada mengkodekannya menjadi String seperti pada contoh HTML!)Dalam contoh ini Anda dapat mengganti 0xFFFF0000 dengan a
getResources().getColor(R.color.red)
sumber
Saya telah melakukan ini:
Tetapkan Warna pada Teks dengan mengirimkan String dan warna :
Tetapkan teks pada TextView / Button / EditText dll dengan memanggil kode di bawah ini:
TextView:
Dapatkan String Berwarna:
Setel Teks di TextView dari dua string dengan warna berbeda:
Selesai
sumber
Html.fromHtml("...")
dengan panggilan keHtml.fromHtml("...", FROM_HTML_MODE_LEGACY)
Gunakan SpannableStringBuilder
sumber
Hai teman-teman saya sudah melakukan ini, cobalah
Di dalam kelas TextViewUtils Anda menambahkan metode ini
sumber
Lebih baik menggunakan string dalam file string, karena itu:
Pemakaian:
sumber
Saya telah menulis beberapa kode untuk pertanyaan lain yang mirip dengan yang satu ini, tetapi pertanyaan itu digandakan jadi saya tidak bisa menjawabnya di sana jadi saya hanya meletakkan kode saya di sini jika seseorang mencari persyaratan yang sama.
Ini bukan kode yang sepenuhnya berfungsi, Anda perlu membuat beberapa perubahan kecil untuk membuatnya berfungsi.
Ini kodenya:
Saya telah menggunakan gagasan @Graeme tentang penggunaan teks yang dapat dipindai.
Metode Warna Acak:
sumber
Coba ini:
sumber
Gunakan kelas SpannableBuilder alih-alih pemformatan HTML jika memungkinkan karena lebih cepat daripada parsing format HTML. Lihat tolok ukur saya sendiri "SpannableBuilder vs HTML" di Github Terima kasih!
sumber
Jawaban yang luar biasa! Saya bisa menggunakan Spannable untuk membangun teks berwarna pelangi (jadi ini bisa diulang untuk setiap array warna). Inilah metode saya, jika itu membantu siapa pun:
Dan kemudian saya hanya setText (buildRainboxText (pack_name)); Perhatikan bahwa semua kata yang saya masukkan di bawah 15 karakter dan ini hanya mengulangi 5 warna 3 kali - Anda ingin menyesuaikan warna / panjang array untuk penggunaan Anda!
sumber
untuk 24 API dan lainnya (bendera)
Info lebih lanjut
sumber
Karena API 24 Anda memiliki FROM_HTML_OPTION_USE_CSS_COLORS sehingga Anda dapat menentukan warna dalam CSS alih-alih mengulanginya sepanjang waktu dengan
font color="
Jauh lebih jelas - ketika Anda memiliki beberapa html dan Anda ingin menyorot beberapa tag yang telah ditentukan - Anda hanya perlu menambahkan fragmen CSS di atas html Andasumber
25 Juni 2020 oleh @canerkaseler
Setelah itu, panggil fungsi di atas. Anda dapat menelepon lebih dari satu:
Output: Anda dapat melihat garis bawah dan warna yang berbeda satu sama lain.
@canerkaseler
sumber