继续就android的文本样式进行分析:
MaskFilterSpan,滤镜样式,只有一个构造函数:
MaskFilterSpan(MaskFilter filter):参数filter,滤镜样式。
说明:
在android系统里,MaskFilter提供了两个子类,BlurMaskFilter和EmbossMaskFilter,分别用来制作模糊效果和浮雕效果。
效果:
QuoteSpan,引用样式,在文本左侧添加一条表示引用的竖线,该类有3个构造函数:
QuoteSpan():无参构造,默认颜色为蓝色。
QuoteSpan(int color):参数color,颜色值。
QuoteSpan(Parcel src):包含颜色值信息的包装类。使用:
Parcel p = Parcel.obtain();
p.writeInt(Color.BLACK);
p.setDataPosition(0);
QuoteSpan qs = new QuoteSpan(p);
效果:
RasterizerSpan,字面义为光栅化,实际效果不明显,待完善。一个构造函数:
RasterizerSpan(Rasterizer r):Rasterizer只有一个系统定义了的子类LayerRasterizer
RelativeSizeSpan,相对大小,指相对于文本设定的大小的相对比例,如果没有设定则采用系统默认值。该类有两个构造函数:
RelativeSizeSpan(float proportion):参数proportion,比例值。如果文字设定大小为A,则显示出来的大小为A×proportion。
RelativeSizeSpan(Parcel src):参数src,包含了比例值信息的包装类。使用:
Parcel p = Parcel.obtain();
p.writeFloat(2.5f);
p.setDataPosition(0);
RelativeSizeSpan rss = new RelativeSizeSpan(p);
效果:
ScaleXSpan,横向缩放样式,将字体按比例进行横向缩放。构造函数:
ScaleXSpan(float proportion):参数proportion,缩放比例。如果字体设置的大小为A,则实际显示为A×proportion。
ScaleXSpan(Parcel src):参数src,包含了缩放比例信息的包装类。使用:
Parcel p = Parcel.obtain();
p.writeFloat(2.5f);
p.setDataPosition(0);
ScaleXSpan rss = new ScaleXSpan(p);
效果:
StrikethroughSpan,删除线样式。该类有两个构造函数:
StrikethroughSpan()和SrickkethroughSapn(Parcel src)。但有参数的构造函数并未对src参数做处理,
public StrikethroughSpan(Parcel src) {
}
因此这两个构造函数完全是同样的效果。
StyleSpan,主要由正常、粗体、斜体和同时加粗倾斜四种样式,常量值定义在Typeface类中。构造函数:
StyleSpan(int style):参数style,定义在Typeface中的常量。
StyleSpan(Parcel src):参数src,包含字体信息的包装类,用法:
Parcel p = Parcel.obtain();
p.writeInt(Typeface.BOLD_ITALIC);
p.setDataPosition(0);
StyleSpan ss = new StyleSpan(p);
效果:
SubscriptSpan,脚注样式,比如化学式的常见写法,当然,还可以对脚注的文字做一定的缩放。构造函数:
SubscriptSpan():无参构造。
SubscriptSpan(Parcel src):一参构造,参数src并未起任何作用,源码中为:
public SuperscriptSpan(Parcel src) {
}
效果:
SuperscriptSpan,上标样式,比如数学上的次方运算,当然,还可以对上标文字进行缩放。构造函数:
SuperscriptSpan():无参构造。
SuperscriptSpan(Parcel src):一参构造,参数src并未起任何作用,源码中为:
public SuperscriptSpan(Parcel src) {
}
效果:
TabStopSpan.Standard,制表位偏移样式,距离每行的leading margin的偏移量,据测试在首行加入制表符时才产生效果。构造函数:
TabStopSpan.Standard(int where):参数where,偏移量。
效果:
TextAppearanceSpan,使用style文件来定义文本样式,该类有4个构造函数:
TextAppearanceSpan(Context context, int appearance):参数context,传入的上下文,参数appearance,引用的样式表,如R.style.my_style。
TextAppearanceSpan(Context context, int appearance, int colorList):参数context,使用的上下文,参数appearance,引用的样式表,如R.style.my_style,参数colorList,使用方式未知,如果设置为小于0,则参数将不产生效果。
TextAppearanceSpan(String family, int style, int size,ColorStateList color, ColorStateList linkColor):参数family,字体,仅支持系统自带的三种字体,MONOSPACE、SERIF和SANS,参数style,TypeFace中定义的字体样式,BOLD、ITALIC等,参数size,字体大小,参数color,字体颜色,参数linkColor,使用方式未知。TextAppearanceSpan(Parcel src):参数src,含有样式信息的包装类,样式信息参照5参构造。使用:
Parcel p = Parcel.obtain();
p.writeString(\"SERIF\");
p.writeInt(Typeface.BOLD_ITALIC);
p.writeInt(10);
try {
ColorStateList colorlist = ColorStateList.createFromXml(ctx.getResources(),ctx.getResources().getXml(R.drawable.parcelcolorlist));
p.writeInt(1);
colorlist.writeToParcel(p, Parcelable.PARCELABLE_WRITE_RETURN_VALUE);
p.writeInt(1);
colorlist.writeToParcel(p, Parcelable.PARCELABLE_WRITE_RETURN_VALUE);
} catch (Exception e) {
e.printStackTrace();
}
p.setDataPosition(0);
TextAppearanceSpan tas = new TextAppearanceSpan(p);
注:在这个设置中style似乎并未起到作用,另外关于这个类的colorList和linkColor参数的使用尚不明了,有待解答。
效果:
TypefaceSpan,字体样式,可以设置不同的字体,比如系统自带的SANS_SERIF、MONOSPACE和SERIF。构造函数:
TypefaceSpan(String family):参数family,字体的值,以字符串表示。
TypefaceSpan(Parcel src): 参数src,包含字体family信息的包装类,使用如下:
Parcel p = Parcel.obtain();
p.writeString(\"SERIF\");
p.setDataPosition(0);
TypefaceSpan ts = new TypefaceSpan(p);
效果:
UnderlineSpan,下划线样式,给一段文字加上下划线。构造函数:
UnderlineSpan(): 无参构造。
UnderlineSpan(Parcel src):一参构造, 与无参构造效果相同,构造中未对src做处理。源码:
public UnderlineSpan(Parcel src) {
}
效果:
URLSpan,可以打开一个链接。两个构造函数:
URLSpan(String url):参数url,链接地址。
URLSpan(Parcel src):参数src,包含链接地址信息的包装类,使用如下:
Parcel p = Parcel.obtain();
p.writeString("http://www.sina.com.cn");
p.setDataPosition(0);
URLSpan us = new URLSpan(p);
效果:
以上效果均在android2.3中测试,以后新增的几个类并未做说明,上面的类中还有几处使用的不甚明了的地方,希望能够尽快的完善。
以上所有的效果均写在了一个APK里,源码已上传至Android文本样式