框架介绍
框架涉及到的类遵循以下四个定义规则:
- 如果一个
Span
影响字符层次上的文字格式,那么需要继承CharacterStyle
类。 - 如果一个
Span
影响段落层次上的文字格式,那么需要继承ParagraphStyle
接口。 - 如果一个
Span
修改字符层次上的文字外观,那么需要继承UpdateAppearance
接口。 - 如果一个
Span
修改字符层次上度量或者尺寸,那么需要继承UpdateLayout
接口。
但是实际上我们往往继承的是更加具体的类,而不是以上这些抽象类和接口。
类型介绍
下面是Android
预设的一些Span
的用法:
android.text.style.BulletSpan
该类影响段落层次的文字格式,可以让你在段落前加一个小圆点。
BulletSpan span = new BulletSpan(15,Color.RED);
SpannableString spannableString = new SpannableString(CONTENT);
spannableString.setSpan(span,0,1,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
mTvTextView.setText(spannableString);
android.text.style.QuoteSpan
可以在段落前添加竖直的引用线。
QuoteSpan span = new QuoteSpan(Color.RED);
spannableString.setSpan(span,0,2,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
android.text.style.AlignmentSpan
可以对文字对齐方式进行设置,有水平居中,左侧对齐,右侧对齐。
AlignmentSpan.Standard span = new AlignmentSpan.Standard(Layout.Alignment.ALIGN_CENTER);
spannableString.setSpan(span,0,0,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
android.text.style.UnderlineSpan
它可以在文字下方添加下划线。其内部实现其实就是使用Paint.setUnderlineText(true)
实现的。
UnderlineSpan span = new UnderlineSpan();
spannableString.setSpan(span,0,spannableString.length(),Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
android.text.style.StrikethroughSpan
它允许你在文字上添加删除线。它内部使用Paint.setStrikeThruText(true))
来实现。
StrikethroughSpan span = new StrikethroughSpan();
spannableString.setSpan(span,0,spannableString.length(),Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
android.text.style.SubscriptSpan
文字作为下标进行显示
SubscriptSpan span = new SubscriptSpan();
spannableString.setSpan(span,0,spannableString.length()/2,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
android.text.style.SuperscriptSpan
同上,文字作为上标显示
android.text.style.BackgroundColorSpan
你可以使用它设置文字的背景颜色
BackgroundColorSpan span = new BackgroundColorSpan(Color.RED);
spannableString.setSpan(span,0,spannableString.length()/2,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
android.text.style.ForegroundColorSpan
同上,可以设置字体的颜色
android.text.style.ImageSpan
可以在文字中添加图片
ImageSpan span = new ImageSpan(this,R.mipmap.ic_launcher);
spannableString.setSpan(span,0,1,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
android.text.style.StyleSpan
它允许你设置文字的类型(bold, italic, normal)
StyleSpan span = new StyleSpan(Typeface.BOLD);
spannableString.setSpan(span,0,spannableString.length()/2,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
android.text.style.AbsoluteSizeSpan
它允许你设置文字的绝对字体大小。
AbsoluteSizeSpan span = new AbsoluteSizeSpan(24,true);
spannableString.setSpan(span,0,spannableString.length()/2,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
android.text.style.RelativeSizeSpan
允许设置相对字体的大小。
传入的参数为2.0f这样的。
android.text.style.ScaleXSpan
可以在文字的X方向上进行缩放
ScaleXSpan span = new ScaleXSpan(2.0f);
spannableString.setSpan(span,0,spannableString.length()/2,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
android.text.style.MaskFilterSpan
可以在文字上设置蒙版(android.graphics.MaskFilter)
//Blur a character
span = new MaskFilterSpan(new BlurMaskFilter(density*2, BlurMaskFilter.Blur.NORMAL));
//Emboss a character
span = new MaskFilterSpan(new EmbossMaskFilter(new float[] { 1, 1, 1 }, 0.4f, 6, 3.5f));