Span flag详解
在android中,如果要实现text的各种样式,图文混排等,简单的样式可以靠几个不同的textview来拼成,而复杂的样式要求,用不同的textview来拼接则不太现 实。这时候就spannable就起作用了,通过设置SpannableString或SpannableStringBuilder的setSpan来设置文本某段的样式,或者改变某段文本的颜色,或者大小,或者直接替换文本成图片。
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
Span flag详解的更多相关文章
- (八)open函数的flag详解
3.1.4.open函数的flag详解13.1.4.1.读写权限:O_RDONLY O_WRONLY O_RDWR(1)linux中文件有读写权限,我们在open打开文件时也可以附带一定的权限说明(譬 ...
- Activity的任务栈Task以及启动模式与Intent的Flag详解
什么是任务栈(Task) 官方文档是这么解释的 任务是指在执行特定作业时与用户交互的一系列 Activity. 这些 Activity 按照各自的打开顺序排列在堆栈(即“返回栈”)中. 其实就是以栈的 ...
- Activity的启动模式与flag详解
Activity有四种加载模式:standard(默认), singleTop, singleTask和 singleInstance.以下逐一举例说明他们的区别: standard:Activity ...
- Go flag 详解,实现二级子命令
前言 日常开发使用到的命令行工具大都支持如下特性: 文档自动生成(如 -h --help) 多级子命令(如 docker exec -it) 支持参数(如 ls -color=auto) 长短选项(如 ...
- Android之TextView的样式类Span的使用详解
Android中的TextView是个显示文字的的UI类,在现实中的需求中,文字有各式各样的样式,TextView本身没有属性去设置实现,我们可以通过Android提供的 Spannab ...
- ASP.NET 运行时详解 揭开请求过程神秘面纱
对于ASP.NET开发,排在前五的话题离不开请求生命周期.像什么Cache.身份认证.Role管理.Routing映射,微软到底在请求过程中干了哪些隐秘的事,现在是时候揭晓了.抛开乌云见晴天,接下来就 ...
- Android中Service的使用详解和注意点(LocalService)
Android中Service的使用详解和注意点(LocalService) 原文地址 开始,先稍稍讲一点android中Service的概念和用途吧~ Service分为本地服务(LocalServ ...
- Dockerfile详解
Dockerfile详解 利用Dockerfile文件,可以构建docker的image镜像 命令使用 通过-f参数指定Dockerfile路径,进行构建image docker build -f / ...
- Linux内存管理之mmap详解
转发之:http://blog.chinaunix.net/uid-26669729-id-3077015.html Linux内存管理之mmap详解 一. mmap系统调用 1. mmap系统调用 ...
随机推荐
- JqueryMobile- 搭建主模板
最近公司要开发手机端的,可是我没学过安卓,然后用HTML5+JQUERYMOBILE也可以做这些手机端的程序,做成个网页,发到网上,免强也行,于是开始了我JQUERYMOBILE的学习. 先放一下主模 ...
- C语言单向循环链表解决约瑟夫问题
据说著名犹太历史学家 Josephus有过以下的故事:在罗马人占领乔塔帕特后,39 个犹太人与Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被敌人抓到,于是决定了一个自杀方式,4 ...
- 用python查看URL编码的中文
什么是URL编码呢,请看https://zh.wikipedia.org/wiki/Urlencode. 有时,我们向一些网站提交中文参数时,中文是会被编码成这种格式的 "%B1%E0%C2 ...
- servler--请求重定向
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletExcepti ...
- Oracle_11g_R2安装详解_for_Windows_7
Oracle 11g R2安装全攻略 - For Windows 7 图文教程 1.下载Oracle 11g R2的Windows版本,官方下载地址如下: http://download.oracle ...
- Android应用之《宋词三百首》(二)
接上回,上回我们讲到MainActivity里面将所有的宋词标题和作者显示到界面的ListView中去,我们接下来的工作是通过点击ListView的Item跳转到ContentActivity里面去显 ...
- esxi 5.1 由于断电错误无法启动 报错 bank5 invalid configuration
由于着急,处理过程中也没有截图,这里简单的描写叙述下整个过程吧. IBM pcserver x3850 可能是机器太热的原因,中午无故掉电,导致esxi无法正常启动 启动时报错 bank5 inval ...
- 开始使用版本控制,局域网搭个SVN
话说以前自己做的一些小项目,经常出现忘记保存.突然断电等令人抓狂的事情.后来想到的办法是备份,这备份又有一个进化的过程,最先是建一个文件夹,隔一段时间压缩一下放进去,但是这个命名实在是麻烦,后来傻乎乎 ...
- C# 强制关闭当前程序进程(完全Kill掉不留痕迹)
C# 强制关闭当前程序进程(完全Kill掉不留痕迹) /// <summary> /// 运行DOS命令 /// DOS关闭进程命令(ntsd -c q -p PID )PID为进程的ID ...
- [ES6] 19. for ... of
In ES5, we have for ... in: var phones = ["iPhone", "Nexus", "Nokia"]; ...