TextView在Android中几乎是再常见不过的控件了,几乎遍布在各个角落里,对TextView并没有什么技术点来做分析,但是有时候可能会需要你在项目中处理一些特殊字体,比如下划线,横穿线,亦或者是为TextView部分字体设置点击或者颜色背景等等,这点需求虽然不是什么难事,但是选不好解决方法真的会可能会让你折腾好久。说了这么多无非就是开篇引个题,下面为大家介绍SpanableString哈。

里面需要具体分析的技术点并不是太多,我先给大家贴上源码,看看google是怎么定义这么一个东东的。

/*** This is the class for text whose content is immutable but to which* markup objects can be attached and detached.* For mutable text, see {@link SpannableStringBuilder}.*/

上面这段内容摘自安卓SpanableString源码里面的注释,大体意思就是说

这是一个内容和标记都可以更改的文本类

其实源码内容并不是太多,感兴趣的话可以去查看下源码

源码关键的两个方法

 public void setSpan(Object what, int start, int end, int flags) {}public void removeSpan(Object what) {}

我先带大家简单使用下这个控件,然后在来分析,其实说到这里有一个小细节开篇的时候忘记跟大家提起了,就是看到SpanableString,其实还有SpanableStringBuilder,其用法类似,大家可以类比String跟StringBuilder来区别,我在此不多解释了,就像你会有String肯定也会使用StringBuilder,我就不在做重复的解释了,下面先来具体举个例子带大家认识下这个东东。

    SpannableString spannableString = new SpannableString("转点软件技术工作室技术分享专题");ForegroundColorSpan colorSpan = new ForegroundColorSpan(Color.parseColor("#009ad6"));spannableString.setSpan(colorSpan, 0, 3, Spannable.SPAN_EXCLUSIVE_INCLUSIVE);((TextView)findViewById(R.id.mode1)).setText(spannableString);

通过上述代码就可以实现开篇提到的给部分字体设置颜色的效果,那趁着大家现在对SpanableString有个大概的认识之后我先简单分析下流程,然后再把其他使用方法给大家总结下。

我个人是吧SpanableString理解成一个特殊的字符串,不同于String的是他可以在上面做出一些花哨的东西,示例代码中分四步完成了这一操作。

1.先是new出一个SpanableString对象,并为其初始化一个字符串,

2.然后通过span的方式生成一个colorSpan对象,这里的span可以设置成其他任何你想设置的形式,比如开篇提到的下划线或者上划线,点击事件都可以,对应于不同的span对象,稍后我整理给大家。

3.为SpanableString设置span。setSpan的四个参数稍后我结合源码分析给大家。

4.为textView设置特殊样式的字体。

具体分析:

从上面的步骤中大家也看出了,其实设置特殊样式的关键步骤在第2步,下面我先为大家整理里具体都可以设置那些特殊样式:

常用到的Span大致如下

BackgroundColorSpan : 文本背景色ForegroundColorSpan : 文本颜色MaskFilterSpan : 修饰效果,如模糊(BlurMaskFilter)浮雕RasterizerSpan : 光栅效果StrikethroughSpan : 删除线SuggestionSpan : 相当于占位符UnderlineSpan : 下划线AbsoluteSizeSpan : 文本字体(绝对大小)DynamicDrawableSpan : 设置图片,基于文本基线或底部对齐。ImageSpan : 图片RelativeSizeSpan : 相对大小(文本字体)ScaleXSpan : 基于x轴缩放StyleSpan : 字体样式:粗体、斜体等SubscriptSpan : 下标(数学公式会用到)SuperscriptSpan : 上标(数学公式会用到)TextAppearanceSpan : 文本外貌(包括字体、大小、样式和颜色)TypefaceSpan : 文本字体URLSpan : 文本超链接ClickableSpan : 点击事件

其用法大家可以套用示例代码中的样子,无非是具体的Span类型不同,用法一致。

现在我解释刚刚在第三步中说到的setSpan的用法,以及4个参数具体代表的含义,先给大家贴上setSpan的源码。

 public void setSpan(Object what, int start, int end, int flags) {super.setSpan(what, start, end, flags);}

上述源码是我直接从SpanableString类中摘取出来的,

第一个参数  Object what:这个what就是上面分享的各种Span的类型,大家根据需要自己指定。

第二个第三个参数 int start int end:这两个参数是Span开始跟结束的位置。

第四个参数: int flag 参数用4中类型,分别代表的意思为span开始结束的位置包含或者不包含start 、end,

flags的取值如下:

Spannable. SPAN_INCLUSIVE_EXCLUSIVE:前面包括,后面不包括,即在文本前插入新的文本会应用该样式,而在文本后插入新文本不会应用该样式

Spannable. SPAN_INCLUSIVE_INCLUSIVE:前面包括,后面包括,即在文本前插入新的文本会应用该样式,而在文本后插入新文本也会应用该样式

Spannable. SPAN_EXCLUSIVE_EXCLUSIVE:前面不包括,后面不包括

Spannable. SPAN_EXCLUSIVE_INCLUSIVE:前面不包括,后面包括

好了,看到这里我想你应该已经掌握了具体怎么设置特殊并且花哨的textview了,其他各种Span的设置,代码大同小异我就不重复贴代码带大家演示了,有一个小细节需要大家注意下,我贴上代码算是提醒下大家吧,在设置ClickableSpan的时候千万别忘了setMovementMethod。示例代码如下:

SpannableString spannableString = new SpannableString("转点软件技术工作室技术分享");ClickableSpan clickableSpan = new ClickableSpan() {@Overridepublic void onClick(View widget) {//TODO 点击事件在此处理System.out.println("转点软件被点击了.....");}};spannableString.setSpan(clickableSpan,0,3, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);textView.setText(spannableString);textView.setMovementMethod(LinkMovementMethod.getInstance());  //为TextView设置完Span后,别忘了setMovementMethod

上述过程,如有分析不到位的地方,还请各位看官批评扶正。

Android花样Text设置神器之SpanableString相关推荐

  1. (转载)Android花样Text,设置TextView的字体、颜色、超链接等

    使用Spannable或Html.fromHtml设置字体.颜色.超链接等 Android花样Text设置神器之SpanableString

  2. 【转】Android图片加载神器之Fresco-加载图片基础[详细图解Fresco的使用]

    Fresco简单的使用-SimpleDraweeView 百学须先立志-学前须知: 在我们平时加载图片(不管是下载还是加载本地图片-..)的时候,我们经常会遇到这样一个需求,那就是当图片正在加载时应该 ...

  3. Android图片加载神器之Fresco-加载图片基础[详细图解Fresco的使用](秒杀imageloader)...

    Fresco简单的使用-SimpleDraweeView 百学须先立志-学前须知: 在我们平时加载图片(不管是下载还是加载本地图片-..)的时候,我们经常会遇到这样一个需求,那就是当图片正在加载时应该 ...

  4. Android图片加载神器之Fresco,基于各种使用场景的讲解

    Fresco是Facebook开源Android平台上一个强大的图片加载库,也是迄今为止Android平台上最强大的图片加载库. 优点:相对于其他开源的第三方图片加载库,Fresco拥有更好的内存管理 ...

  5. Android图片加载神器之Fresco, 基于各种使用场景的讲解

    Fresco是Facebook开源Android平台上一个强大的图片加载库,也是迄今为止Android平台上最强大的图片加载库. 优点:相对于其他开源的第三方图片加载库,Fresco拥有更好的内存管理 ...

  6. Android图片加载神器之Fresco-加载图片基础[详细图解Fresco的使用]

    前半部分找不到原文链接了 后半部分原文链接:http://www.jianshu.com/p/5364957dcf49 著作权归作者所有,转载请联系作者获得授权,并标注"简书作者" ...

  7. miui7 android系统设置,MIUI7怎么设置神隐模式?小米MIUI7神隐模式设置方法图解

    MIUI7神隐模式相信很多用小米的朋友都已经听说过了,这是在最新版的MIUI7出来的一个模式.在神隐模式下可以制定后台运行的时候不使用网络或者GPS邓功能,从而达到省电的效果,那么,MIUI7神隐模式 ...

  8. APP稳定性测试神器之Monkey-随机事件测试

    APP稳定性测试神器之Monkey-随机事件测试 Monkey是Android中的一个命令行工具,可以运行在模拟器里或者现实设备中,向系统发送伪随机的用户事件流(点击.滑动.Application切换 ...

  9. Android花样loading进度条(四)-渐变色环形进度条

    背景 Android花样loading进度条系列文章主要讲解如何自定义所需的进度条,包括水平.圆形.环形.圆弧形.不规则形状等. 本篇我们对配文字环形进度条稍加变换,将圆环颜色改为渐变色的形式,使得进 ...

  10. Android花样loading进度条(二)-简单环形进度条

    背景 Android花样loading进度条系列文章主要讲解如何自定义所需的进度条,包括水平.圆形.环形.圆弧形.不规则形状等. 本篇我们从圆形进度条讲起,讲简单形式的环形进度条,只有进度色彩,没有进 ...

最新文章

  1. php函数find的用法,c语言find函数的用法详解
  2. linux下nginx部署以及配置详解
  3. FactoryBean的使用--转
  4. ML之SVM:SVM算法的简介、应用、经典案例之详细攻略
  5. ai如何做倒角和圆角_石材路沿石是如何倒角的?倒角费用是多少?路沿石质量标准?...
  6. ANSYS-CFX,计算时报错,内存参数报错,return code 1【终极解决方案】
  7. hadoop实训报告总结及体会_管理工程学院举办电子商务实训表彰大会
  8. Java基础篇1——变量与数据类型
  9. linux服务器创建FTP
  10. Java负数除法和求余运算
  11. php做平行四边形,用 CSS 实现三角形与平行四边形_html/css_WEB-ITnose
  12. 今天开始做战斗,回合制战斗代码实现第一篇补充,从头开始,简单的2d回合制游戏一些文档方面的知识
  13. 360FLEX与会者的演讲资源链接
  14. latex 中文乱码问题
  15. 看完南京前11年房价,我哭了!今年实在太特么狠了
  16. 蓝桥杯web模拟题知识点以及解析
  17. JAVA操作图片/合成/电子盖章等
  18. mysql idb,frm文件复制恢复
  19. 微信公众号和微信小程序的区别
  20. mdf转sql mysql_如何将数据库文件.mdf导入/恢复到SQL_Server2000

热门文章

  1. Windows 7精简版(2019.04.10)
  2. 机器学习笔记week1——奥卡姆剃刀原则、L1与L2范数正则化、模型泛化性
  3. Python基于HRHet的跌倒检测系统(源码&教程)
  4. 一年工作经验,两周的面试,拿到几个offer的面试经验总结
  5. XShell连接远程centos监控控制台(tomcat)输出信息
  6. 情人节送男生什么礼物好?2022情人节礼物推荐
  7. Codeforces Round #734 (Div. 3)_B2. Wonderful Coloring - 2(贪心)
  8. 小程序谷歌统计 Google Analytics
  9. 上海内推 | 微软亚洲研究院上海人工智能组招聘深度学习研究实习生
  10. STP生成树协议基础