Android开发总结笔记 Spannable(文本样式[上]) 1-1-6-2
来源:互联网 发布:吉他谱曲软件 编辑:程序博客网 时间:2024/06/10 02:32
本文参考 http://blog.csdn.net/lixin84915/article/details/8110667
Spannable的继承结构
从上图可以看出,Spannable实现了Spanned这个接口,而Spanned又实现了CharSequence这个接口
而在TextView的setText(CharSequence text)方法中,参数又恰好是CharSequence类型的。
所以,Spannable可以通过setText方法来实现这个文本的设置
具体的用法跟字符串相似,有以下两种
- Spannable span = new SapnnableString("字符串");
- 或者通过SpannableStringBuilder
下面来了解一下Spannable这个类的一个常用方法setSpan(Obj what,int start,int end,int flag)
- Obj表示的是具体样式的对象
- start是样式开始的位置
- end是样式结束的位置
- flag 有四个值 Spanned.SPAN_EXCLUSIVE_EXCLUSIVE --- 不包含两端start和end所在的端点 (a,b)
Spanned.SPAN_EXCLUSIVE_INCLUSIVE --- 不包含端start,但包含end所在的端点 (a,b]
Spanned.SPAN_INCLUSIVE_EXCLUSIVE --- 包含两端start,但不包含end所在的端点 [a,b)
Spanned.SPAN_INCLUSIVE_INCLUSIVE--- 包含两端start和end所在的端点 [a,b]
各种样式
1、AbsoluteSizeSpan(改变字体)
这个类有三个构造方法
- AbsoluteSizeSpan(int size)
- AbsoluteSizeSpan(int size,boolean dip)
- AbsoluteSizeSpan(Parcel)
size 顾名思义就是大小啦
dip 如果此处设置为true,size的单位就会以dip为单位
Parcel 这是一个存放对象引用和数据的容器
在AbsoluteSizeSpan的这个构造方法中,会把parcel中的数据读取出来作为size来设定字体大小
下面用代码来实现一下
Parcel parcel=Parcel.obtain();
parcel.writeInt(50);
parcel.setDataPosition(0);
AbsoluteSizeSpan absolute=new AbsoluteSizeSpan(parcel);
Spannable span=new SpannableString("哈哈");
AbsoluteSizeSpan absolute2=new AbsoluteSizeSpan(70);
Spannable span2=new SpannableString("嘿嘿");
AbsoluteSizeSpan absolute3=new AbsoluteSizeSpan(90);
Spannable span3=new SpannableString("嘻嘻");
span.setSpan(absolute, 0, span.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
span2.setSpan(absolute2, 0, span.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
span3.setSpan(absolute3, 0, span.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
SpannableStringBuilder spannableStringBuilder=new SpannableStringBuilder();
spannableStringBuilder.append(span);
spannableStringBuilder.append(span2);
spannableStringBuilder.append(span3);
textView.setText(spannableStringBuilder);
为了代码简洁一点,我决定简单地封装一下
public static CharSequence getStyleText(Object[] styleArray, String[] textArray) {
SpannableStringBuilder builder = new SpannableStringBuilder();
for (int i = 0; i < textArray.length; i++) {
Spannable span = new SpannableString(textArray[i]);
span.setSpan(styleArray[i], 0, textArray[i].length(), Spanned.SPAN_INCLUSIVE_INCLUSIVE);
builder.append(span);
}
return builder;
}
Parcel parcel=Parcel.obtain();
parcel.writeInt(50);
parcel.setDataPosition(0);
AbsoluteSizeSpan absolute=new AbsoluteSizeSpan(parcel);
AbsoluteSizeSpan absolute2=new AbsoluteSizeSpan(70);
AbsoluteSizeSpan absolute3=new AbsoluteSizeSpan(90);
Object[] obj={absolute,absolute2,absolute3};
String[] str={"哈哈","嘿嘿","嘻嘻"};
textView.setText(StringStyleUtil.getStyleText(obj,str));
这样代码就少很多了。哈哈!!
2.AlignmentSpan.Standard(标准文本对齐方式)
这个类有两个构造方法
- AlignmentSpan.Standard(Parcel src)
- AlignmentSpan.Standard(Layout.Alignment align)
Layout.Alignment是一个常量,有三个值
- ALIGN_NORMAL
- ALIGN_CENTER
- ALIGN_OPPOSITE
Parcel parcel=Parcel.obtain();
parcel.writeString("ALIGN_NORMAL");
parcel.setDataPosition(0);
AlignmentSpan.Standard alignmentSpan=new AlignmentSpan.Standard(parcel);
AlignmentSpan.Standard alignmentSpan2=new AlignmentSpan.Standard(Layout.Alignment.ALIGN_CENTER);
AlignmentSpan.Standard alignmentSpan3=new AlignmentSpan.Standard(Layout.Alignment.ALIGN_OPPOSITE);
Object[] obj={alignmentSpan,alignmentSpan2,alignmentSpan3};
String[] str={"哈哈\n","嘿嘿\n","嘻嘻"};
textView.setText(StringStyleUtil.getStyleText(obj,str));
}
然后就是这个样子了,注意"\n",要换行,对齐方式才有效
后面的就不详细说了,用法是一样的,列举一下
3.BackgroundColorSpan(背景色样式)
两个构造函数
- BackgroundColorSpan(Parcel parcel)
- BackgroundColorSpan(int color) 颜色值
Parcel parcel=Parcel.obtain();
parcel.writeInt(Color.GREEN);
parcel.setDataPosition(0);
4.BulletSpan(着重样式,类似于html的无序列表标签<li>)
四个构造函数
- BulletSpan() 提供一个和文本颜色一样的符号
- BulletSpan(int gapWidth) 提供一个和文本颜色一样的符号,并设置符号和文字之间的间隔
- BulletSpan(int color,int gapWidth) 提供一个指定颜色的符号,并且设置符号和文字之间的间隔
- BulletSpan(Parcel parcel)
5.DrawableMarginSpan(图片+margin 样式)
两个构造函数
- DrawableMarginSpan(Drawable b) 提供一个图片显示
- DrawableMarginSpan(Drawable b,int pad) 提供一个图片显示并且设置图片到文字的距离
6.ForegroundColorSpan(文字颜色样式)
两个构造函数
- ForegroundColorSpan(Parcel parcel)
- ForegroundColorSpan(int color)
7.IconMarginSpan(图标+margin样式)
两个构造函数
- IconMarginSpan(Bitmap bitmao) 提供一个图片显示
- IconMarginSpan(Bitmap ,int pad) 提供一个图片显示并且设置图片到文字的距离
8.LeadingMarginSpan.Standard(文本缩进样式)
三个构造函数
- Standard(int arg0) 缩进的像素
- Standard(int arg0,int arg1) 首行缩进的像素,剩余行缩进的像素
- Standard(Parcel parcel)
9.ImageSpan(图片样式,就是添加图片)
这个类的构造方法还挺多的
- ImageSpan(Context context,Bitmap b) 上下文对象,提供一个图片显示
- ImageSpan(Context context,Bitmap b,int verticalAlignment) 上下文对象,提供一个图片显示,还有对齐方式
- ImageSpan(Drawable d) 这个drawable需要设置大小
- ImageSpan(Drawable d,int verticalalignment)
- ImageSpan(Drawable d,String source) source 字符串资源
- ImageSpan(Drawable d,String source,int verticalAlignment)
- ImageSpan(Context context,Uri uri) uri 图片uri
- ImageSpan(Context context,Uri uri,int verticalalignment)
- ImageSpan(Context context,int resourceId) resourceId 图片资源ID
- ImageSpan(Context context,int resourceId,int verticalalignment)
10.URLSpan(打开链接)
两个构造函数
- URLspan(String url)
- URLspan(Parcel parcel)
11.UnderLineSpan(下划线样式)
两个构造函数
- UnderLineSpan()
- UnderLineSpan(Parcel src)
事实上在UnderLineSpan(Parcel src)的内部没有对src这个参数进行处理,所以,两个构造函数得到的结构都是一样的
12.TypeFaceSpan(字体样式)
两个构造函数
- TypeFaceSpan(String family) 字体名字的字符串 SANS_SERIF、MONOSPACE和SERIF
- TypeFaceSpan(Parcel parcel)
13.TextAppearanceSpan(用style文件来定义文本样式)
四个构造函数
- TextAppearanceSpan(Context context,int appearance) 上下文和style文件的id
- TextAppearanceSpan(Context context,int appearance,int colorList) colorList指定颜色
- TextAppearanceSpan(String family,int style,int size,ColorStateList color,ColorStateList linkColor)
Makes text be drawn with the specified typeface, size, style, and colors.(官方文档描述这个构造方法的一句话)
- TextAppearanceSpan(Parcel parcel)
0 0
- Android开发总结笔记 Spannable(文本样式[上]) 1-1-6-2
- Android开发总结笔记 Spannable(文本样式[下]) 1-1-6-3
- Android_ Spannable文本样式
- Android开发总结笔记 Fragment(上) 1-2-11
- 安卓文本样式-Spannable的使用
- 安卓文本样式-Spannable的使用
- 安卓文本样式-Spannable的使用
- Spannable的使用(文本样式设置)
- 安卓文本样式-Spannable的使用
- 安卓文本样式-Spannable的使用
- Android文本显示效果(Spannable)
- HTML5文本样式笔记总结
- Android开发总结笔记 Drawable (上) 3-1
- Android开发总结笔记 属性动画(上) 4-1
- Android开发总结笔记 四大组件之Activity(上) 1-2-1
- Android开发总结笔记 四大组件之Service(上) 1-2-4
- Android开发总结笔记 四大组件之ContentPovider(上) 1-2-8
- Android文本样式——上
- 初始化器
- 委托
- 泛型
- Android ExpandableListView 的简单使用
- 基于B/S模式分布式图书管理系统研究
- Android开发总结笔记 Spannable(文本样式[上]) 1-1-6-2
- Sql数据库学习
- 20个快乐的习惯
- 软件测试基础知识
- switch case 语句内部变量定义
- 各种数据库连接方式
- 根据客户区大小反推窗口大小
- CentOS源码安装gftp缺失stropts.h
- Ubuntu中文路径改英文路径