使用SpannableStringBuilder设置多个属性
1 2 3 4 5 6 7 8 9 10 11 12 13
| val builder = SpannableStringBuilder() builder.append("小明回复小红:你在干嘛呀。")
val styleSpan = StyleSpan(Typeface.BOLD) //粗体
builder.setSpan(styleSpan, 0, 2, Spannable.SPAN_EXCLUSIVE_INCLUSIVE) val styleSpan2 = StyleSpan(Typeface.ITALIC) //斜体
builder.setSpan(styleSpan2, 4, 6, Spannable.SPAN_EXCLUSIVE_INCLUSIVE) val styleSpan3 = StyleSpan(Typeface.BOLD_ITALIC) //粗斜体
builder.setSpan(styleSpan3, 7, builder.length, Spannable.SPAN_EXCLUSIVE_INCLUSIVE) textVideo.text = builder
|
追加新的 Spannable
1 2 3 4 5 6 7 8 9 10 11
| val builder = SpannableStringBuilder() // 将原有文本追加到 SpannableStringBuilder 中 builder.append(textVideo.text) // 创建并设置所需的 Span 对象,如 ForegroundColorSpan、StyleSpan 等 val foregroundColorSpan = ForegroundColorSpan(Color.RED) // 将新的 SpannableString 追加到 SpannableStringBuilder 中 builder.setSpan(foregroundColorSpan, 0, 2, Spannable.SPAN_EXCLUSIVE_INCLUSIVE) // 更新 TextView 的内容 textVideo.text = builder // 继续设置其他样式的 Spannable(可选) // ...
|
获取已经设置过的Spannable
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| // 获取 TextView 中的文本内容 val originalText = textVideo.text if (originalText is Spanned) { // 将 CharSequence 转换为 Spanned 对象 val spannedText = originalText as Spanned // 获取所有的 StyleSpan 类型的 Spannable 对象 val spans = spannedText.getSpans(0, spannedText.length, Any::class.java) // 遍历所有的 StyleSpan 对象 for (span in spans) { // 在这里处理你想要的 Spannable 对象 符判断所需的 Spannable 类型 when (span) { is StyleSpan -> { // 处理 StyleSpan 类型的 Spannable 对象 }
is ForegroundColorSpan -> { // 处理 ForegroundColorSpan 类型的 Spannable 对象 }
is BackgroundColorSpan -> { // 处理 BackgroundColorSpan 类型的 Spannable 对象 } } } }
|
Spannable设置圆角背景
利用SpannableString富文本方式设置圆角标签背景
Android SpannableString 设置文字圆角背景
自定义圆角背景实现富文本标题展示(纯需求实现)
参考资料
SpannableStringBuilder从简单到复杂的使用