在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详解的更多相关文章

  1. (八)open函数的flag详解

    3.1.4.open函数的flag详解13.1.4.1.读写权限:O_RDONLY O_WRONLY O_RDWR(1)linux中文件有读写权限,我们在open打开文件时也可以附带一定的权限说明(譬 ...

  2. Activity的任务栈Task以及启动模式与Intent的Flag详解

    什么是任务栈(Task) 官方文档是这么解释的 任务是指在执行特定作业时与用户交互的一系列 Activity. 这些 Activity 按照各自的打开顺序排列在堆栈(即“返回栈”)中. 其实就是以栈的 ...

  3. Activity的启动模式与flag详解

    Activity有四种加载模式:standard(默认), singleTop, singleTask和 singleInstance.以下逐一举例说明他们的区别: standard:Activity ...

  4. Go flag 详解,实现二级子命令

    前言 日常开发使用到的命令行工具大都支持如下特性: 文档自动生成(如 -h --help) 多级子命令(如 docker exec -it) 支持参数(如 ls -color=auto) 长短选项(如 ...

  5. Android之TextView的样式类Span的使用详解

           Android中的TextView是个显示文字的的UI类,在现实中的需求中,文字有各式各样的样式,TextView本身没有属性去设置实现,我们可以通过Android提供的 Spannab ...

  6. ASP.NET 运行时详解 揭开请求过程神秘面纱

    对于ASP.NET开发,排在前五的话题离不开请求生命周期.像什么Cache.身份认证.Role管理.Routing映射,微软到底在请求过程中干了哪些隐秘的事,现在是时候揭晓了.抛开乌云见晴天,接下来就 ...

  7. Android中Service的使用详解和注意点(LocalService)

    Android中Service的使用详解和注意点(LocalService) 原文地址 开始,先稍稍讲一点android中Service的概念和用途吧~ Service分为本地服务(LocalServ ...

  8. Dockerfile详解

    Dockerfile详解 利用Dockerfile文件,可以构建docker的image镜像 命令使用 通过-f参数指定Dockerfile路径,进行构建image docker build -f / ...

  9. Linux内存管理之mmap详解

    转发之:http://blog.chinaunix.net/uid-26669729-id-3077015.html Linux内存管理之mmap详解 一. mmap系统调用 1. mmap系统调用  ...

随机推荐

  1. python中objects的all和get方法的区别

    all返回的是QuerySet: get返回的是模型对象. 想要获取查询结果的字段值: 从QuerySet中获取对象可以通过for in的形式遍历,之后通过对象获取对象的具体值: get 返回的是对象 ...

  2. Nltest

    查看登陆到的DC:

  3. Android 监听屏幕锁屏,用户解锁

    在做一个程序的时候,需要时刻保持某一服务是启动的,因此想到了通过监听屏幕SCREEN_ON和SCREEN_OFF这两个action.奇怪的是,这两个action只能通过代码的形式注册,才能被监听到,使 ...

  4. 权限执行[Android开发常见问题-4] RunTime.exec()如何以root权限执行多条指令?

    每日一贴,今天的内容关键字为权限执行 RunTime.exec()这个接口可以说是给我们开发者供给了一个很好的直观操纵底层操纵系统的机遇,但是这个接口的使用还有很多需要注意的问题.由于要完全的分析这个 ...

  5. Java模拟登陆02【转载】

    在使用java访问URL时,如果该URL需要身份验证,那么就不能够直接访问,因为没有登陆.那么,如何解决这个问题呢?     方法是使用java模拟登陆,登陆后记录下cookie信息,在下次发起请求时 ...

  6. Codeforces Round #327 (Div. 2) E. Three States BFS

    E. Three States Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/591/probl ...

  7. 关于c#调用C++代码的一些应用的体会

    1.dll函数的导入:    关键字:unmanaged code ; managed code;    具体应用类:System.Runtime.InteropServices    具体使用方法: ...

  8. Android与JavaScrip进行交互(二)

    一.思路分析 经过測试发现,JS中的点击事件仅仅能写一个,假设写了多个,也仅仅会响应第一个,假设写的方法是android端的方法,在web端执行时,后台会报没有定义这种方法的错误.前台点击无响应. 所 ...

  9. ABAP屏幕基础

    Select语句的使用 关键字into后可以加 structure(结构体), internal table(内表) 和 fieldlist(字段列表) Authority 权限 程序员可以根据权限对 ...

  10. php上传常见文件类型对应的$_FILES["file"]["type"](转)

    php上传常见文件类型对应的$_FILES["file"]["type"] from:http://hi.baidu.com/7book/item/374971 ...