学而实习之 不亦乐乎

Android 中 SpannableStringBuilder 的用法

2022-08-04 08:32:12

一、SpannableString 与 SpannableStringBuilder 区别

类似于 String 与 StringBuilder,SpannableString与SpannableStringBuilder区别在于 SpannableString 像一个 String 一样,构造对象的时候传入一个 String,之后再无法更改 String 的内容,也无法拼接多个 SpannableString;而SpannableStringBuilder 则更像是 StringBuilder,它可以通过其 append() 方法来拼接多个 String。

二、实例

SpannableStringBuilder builder=new SpannableStringBuilder("Android:SpannableStringBuilder 使用");

//用颜色标记文本
builder.setSpan(new ForegroundColorSpan(Color.RED), 0, 2, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

//用超链接标记文本
builder.setSpan(new URLSpan("tel:4155551212"), 2, 5,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

//用样式标记文本(斜体)
builder.setSpan(new StyleSpan(Typeface.BOLD_ITALIC), 5, 7, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

//用删除线标记文本
builder.setSpan(new StrikethroughSpan(), 7, 10,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

//用下划线标记文本
builder.setSpan(new UnderlineSpan(), 10, 16, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

//用颜色标记
builder.setSpan(new ForegroundColorSpan(Color.GREEN), 10, 12,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

//获取Drawable资源
Drawable d = getResources().getDrawable(R.drawable.ic_launcher);
d.setBounds(0, 0, d.getIntrinsicWidth(), d.getIntrinsicHeight());

//创建ImageSpan
ImageSpan span = new ImageSpan(d, ImageSpan.ALIGN_BASELINE);
//用ImageSpan替换文本
builder.setSpan(span, 18, 19, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);

tv.append("\n");
tv.setText(builder);
tv.setMovementMethod(LinkMovementMethod.getInstance()); //实现文本的点击生效(使用ClickableSpan时必须加上)