Apa tujuan dari antarmuka ini?
CharSequence
adalah antarmuka Java standar yang mewakili urutan karakter. String
adalah implementasi konkret yang paling umum digunakan CharSequence
, diikuti oleh StringBuilder
.
Spanned
adalah CharSequence
dengan "span" yang menunjukkan pemformatan untuk diterapkan ke bagian teks, di mana span tersebut tidak dapat diubah.
Spannable
adalah Spanned
, menambahkan kemampuan untuk mengubah bentang (untuk menambah atau menghapus pemformatan), tetapi tidak untuk mengubah teks itu sendiri.
SpannedString
adalah implementasi konkret dari Spanned
antarmuka.
SpannableString
adalah implementasi konkret dari Spannable
antarmuka.
dalam skenario mana yang paling umum untuk menggunakannya?
Ketika ada metode yang mengembalikan satu (misalnya, getText()
pada EditText
) atau ketika ada metode yang mengambilnya sebagai parameter (misalnya, setText()
pada a TextView
).
Kutipan kasus penggunaan Anda Html.fromHtml()
mungkin yang paling umum dalam pengembangan Android konvensional, karena a TextView
dengan Spanned
bobot yang jauh lebih ringan daripada a WebView
. Namun, ada kasus penggunaan lain, seperti:
Dalam kasus apa yang terbaik untuk menghindari penggunaannya?
Mereka sangat buruk dalam memerangi kebotakan, menghilangkan salju, memperbaiki pompa panas, membuat souffle, dll.
:-)
Apakah ada dampak kinerja yang jelas untuk dipertimbangkan saat menggunakan salah satunya?
Antarmuka, menurut definisi, tidak memiliki "dampak kinerja" - antarmuka hanyalah deskripsi API.
Saya tidak menyadari bahwa SpannableString
secara signifikan lebih lambat daripada SpannedString
pada operasi tertentu. Namun, SpannableStringBuilder
(yang memungkinkan untuk memanipulasi teks selain span yang memformat teks itu) mungkin sedikit lebih lambat daripada SpannableString
atau SpannedString
untuk berbagai hal. Apakah perbedaan kinerja cukup penting atau tidak akan tergantung pada penggunaan.
spannableString
dan bukan yang normal .. karena saya menghadapi kelambatan yang sangat besar dengansetText(my_string)
ketikamy_string
memiliki smiley di dalamnya (seperti yang ada di watsapp) dibandingkan dengan string normal. . (yang hanya memiliki teks biasa) mohon jelaskan ... entah bagaimana saya percaya bahwa smilleys hanyalah teks (unicode) sajaImageSpan
yang pada gilirannya membutuhkanSpannableString
.Tali
A
String
tidak dapat diubah (yaitu, teks tidak dapat diubah). Itu juga tidak memiliki span yang terkait dengannya. (Span adalah rentang di atas teks yang menyertakan informasi gaya seperti warna, sorotan, miring, tautan, dll.) Jadi, Anda dapat menggunakan aString
saat teks Anda tidak perlu diubah dan tidak memerlukan gaya apa pun.StringBuilder
A
StringBuilder
memiliki teks yang bisa berubah, jadi Anda bisa memodifikasinya tanpa membuat objek baru. Namun, itu tidak memiliki informasi rentang apa pun. Itu hanya teks biasa. Jadi gunakanStringBuilder
saat Anda perlu mengubah teks, tetapi Anda tidak peduli tentang menatanya.SpannedString
A
SpannedString
memiliki teks yang tidak dapat diubah (seperti aString
) dan informasi rentang yang tidak dapat diubah. Ini adalah implementasi konkret dari persyaratan yang ditentukan olehSpanned
antarmuka. Gunakan aSpannedString
ketika teks Anda memiliki gaya tetapi Anda tidak perlu mengubah teks atau gaya setelah itu dibuat.Catatan: Tidak ada yang namanya
SpannedStringBuilder
karena jika teks berubah maka informasi span kemungkinan besar juga harus berubah.SpannableString
A
SpannableString
memiliki teks yang tidak dapat diubah, tetapi informasi span-nya dapat berubah. Ini adalah implementasi konkret dari persyaratan yang ditentukan olehSpannable
antarmuka. Gunakan aSpannableString
ketika teks Anda tidak perlu diubah tetapi gaya perlu diubah.SpannableStringBuilder
A
SpannableStringBuilder
memiliki teks yang bisa berubah dan informasi span. Ini adalah implementasi konkret dari persyaratan yang ditentukan oleh antarmukaSpannable
danEditable
(antara lain). GunakanSpannableStringBuilder
saat Anda perlu memperbarui teks dan gayanya.CharSequence
A
CharSequence
adalah antarmuka dan bukan kelas konkret. Itu berarti itu hanya mendefinisikan daftar aturan yang harus diikuti untuk setiap kelas yang mengimplementasikannya. Dan semua kelas yang disebutkan di atas menerapkannya. Jadi, Anda dapat menggunakan aCharSequence
ketika Anda ingin menggeneralisasi jenis objek yang Anda miliki untuk fleksibilitas maksimum. Anda selalu dapat menurunkannya menjadiString
atauSpannableStringBuilder
atau apa pun nanti jika perlu.sumber