Span flag详解
2015-08-31 18:09
197 查看
在android中,如果要实现text的各种样式,图文混排等,简单的样式可以靠几个不同的textview来拼成,而复杂的样式要求,用不同的textview来拼接则不太现 实。这时候就spannable就起作用了,通过设置SpannableString或SpannableStringBuilder的setSpan来设置文本某段的样式,或者改变某段文本的颜色,或者大小,或者直接替换文本成图片。
android自带的样式在:android.text.style包里边
SpannableStringBuilder spannableStringBuilder = new SpannableStringBuilder("猜不透是哪里出了错");
//这里设置设置后,显示到界面,则会看到“不透”2个字是放大的
spannableStringBuilder.setSpan(new AbsoluteSizeSpan(30, true), 1, 3, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
//关键是这里,SPAN_INCLUSIVE_EXCLUSIVE的作用则就会出来了
//如果这样:
spannableStringBuilder.insert(1,"a");
//则会有“a不透”是放大的,而如果设置的是SPAN_EXCLUSIVE_EXCLUSIVE,则"a"还是正常大小
//而如果设置SPAN_INCLUSIVE_INCLUSIVE
spannableStringBuilder.insert(3,"a");
//则会出现“不透a”为放大的,如果设置SPAN_INCLUSIVE_EXCLUSIVE,则“a”是正常大小
android自带的样式在:android.text.style包里边
1.SpannableString与SpannableStringBuilder的区别
类似String 与StringBuilder的区别,一个是“一次性”的,一个是可以反复修改的。 SpannableString设置完后,不可更改;而SpannableStringBuilder则可以在原来基础上添加,替换,删除文本,甚至移出某个Span。 如果你需要经常改变文字及相关样式,最好使用SpannableStringBuilder。
2.setSpan(Object what, int start, int end, int flags)方法解析
what:这里传入样式,如:AbsoluteSizeSpan等 start:样式作用在文本的起始点(产生的作用包括该点,从0开始) end:样式作用在文本的结束点(产生的作用不包括该点,从0开始) flags:设置style是否包含start或者end flags的选项在Spanned接口中,分别为: SPAN_INCLUSIVE_EXCLUSIVE:包含start,不包含end SPAN_INCLUSIVE_INCLUSIVE:start,end都包含 SPAN_EXCLUSIVE_EXCLUSIVE:start,end都不包含 SPAN_EXCLUSIVE_INCLUSIVE:start不包含,end包含 这里flags的作用,在SpannableString里基本没用,但是如果用在SpannableStringBuilder中,则会起作用,比如:
SpannableStringBuilder spannableStringBuilder = new SpannableStringBuilder("猜不透是哪里出了错");
//这里设置设置后,显示到界面,则会看到“不透”2个字是放大的
spannableStringBuilder.setSpan(new AbsoluteSizeSpan(30, true), 1, 3, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
//关键是这里,SPAN_INCLUSIVE_EXCLUSIVE的作用则就会出来了
//如果这样:
spannableStringBuilder.insert(1,"a");
//则会有“a不透”是放大的,而如果设置的是SPAN_EXCLUSIVE_EXCLUSIVE,则"a"还是正常大小
//而如果设置SPAN_INCLUSIVE_INCLUSIVE
spannableStringBuilder.insert(3,"a");
//则会出现“不透a”为放大的,如果设置SPAN_INCLUSIVE_EXCLUSIVE,则“a”是正常大小
3.总结
INCLUSIVE或EXCLUSIVE会影响原来的span是否影响start点或end点的新字符,而如果在start,end点之间,则肯定会受影响。而新字符插入后,则start,end点 还会改变,比如从“不透”变为“不透a”放大,再在“不透a”后边插入字符,则会以“a”作为end点,根据flag来影响“a”后边插入的字符,而不是从“透”字算end相关文章推荐
- Linus常用的快捷键与shell常用通配符
- 使用git建立远程仓库,让别人git clone下来
- c语言libcurl 使用实例get/post方法+c语言字符串处理
- hadoop集群配置datanode无法启动的原因
- gridview在最后默认一个添加更多, 将String的路径转为bitmap
- C#读取网络流,读取网络上的js文件
- 实训初体验——惠普-济宁
- Java获取系统属性及环境变量
- 网页在线播发视频 在线查看文档
- NPOI大数据量多个sheet导出源码(原)
- 基于s5pv210的lcd色度键功能的个人探索总结
- 分组第一天
- GIT学习笔记一git init
- 内核协议栈tcp层的内存管理
- Linux shell--变量数学运算
- Runloop
- 使用 IndexedDB
- Java接口发送与接收
- 【Gnuradio结合hackrf 通过FSK调制实现文本文件的发送与接收】
- <p>内容溢出文字用"..."代替,且内容某部分内容必须显示在同行后面