Android Span架构学习笔记

来源:互联网 发布:淘宝高颜值平价零食 编辑:程序博客网 时间:2024/06/16 06:55

框架介绍

框架涉及到的类遵循以下四个定义规则:

  • 如果一个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 characterspan = new MaskFilterSpan(new BlurMaskFilter(density*2, BlurMaskFilter.Blur.NORMAL));//Emboss a characterspan = new MaskFilterSpan(new EmbossMaskFilter(new float[] { 1, 1, 1 }, 0.4f, 6, 3.5f));

这里写图片描述

这里写图片描述

原创粉丝点击