在实际的应用开发过程中常常会遇到。在文本的不同部分显示一些不同的字体风格的信息如:文本的字体、大小、颜色、样式、以及超级链接等。

普通情况下,TextView中的文本都是一个样式。对于类似的情况。能够借助SpannableString或SpannableStringBuilder对象来实现以上设置。

SpannableString与SpannableStringBuilder都能够将某段文本设置成一个Span,在Android中。Span表示一段文本的效果,比如,链接形式、图像、带背景的文本等。仅仅是不同的是SpannableStringBuilder能够改动文本的内容。

磨刀不误砍柴工,接下来先让我们熟悉一下SpannableString类。

类结构:


extends Object

implements GetChars Spannable CharSequence

java.lang.Object

   ↳

android.text.SpannableString

类概述:


这类文本的内容是不变的。但标记对象能够被附加和分离。可变的文本,请參阅SpannableStringBuilder

构造方法:


Public Constructors

 

SpannableString(CharSequence source)

经常使用公有方法:


Public Methods

final char

charAt(int i)

返回指定索引位置的字符,第一个字符的索引为0。

boolean

equals(Object o)

Compares this instance with the specified object and indicates if they are equal.

比較这个实例与指定的对象,假设相等则返回true。

final void

getChars(int start, int end, char[] dest, int off)

和String.getChars()方法相似:从指定字符数组中复制字符。start 開始位置,end结束位置。off偏移量。

int

getSpanEnd(Object what)

获取what对象在SpannableString对象中的结束位置。

假设没有匹配返回-1。

int

getSpanStart(Object what)

获取what对象在SpannableString对象中的開始位置。

假设没有匹配返回-1。

final int

length()

返回此序列中的字符数。

void

removeSpan(Object what)

从文本的范围中删除指定的对象。

void

setSpan(Object what,
int start, int end, int flags)

设置一个Span对象。

what

说明:

void setSpan(Object what,
int start, int end, int flags)

设置一个Span对象。当中第一个參数what:表示一段文本的效果,它能够接受例如以下属性:

属性名

说明

BackgroundColorSpan

背景色

ClickableSpan

文本可点击,有点击事件

ForegroundColorSpan

文本颜色(前景色)

MaskFilterSpan

修饰效果,如模糊(BlurMaskFilter)浮雕(EmbossMaskFilter)

MetricAffectingSpan

父类,一般不用

RasterizerSpan

光栅效果

StrikethroughSpan

删除线(中划线)

SuggestionSpan

相当于占位符

UnderlineSpan

下划线

AbsoluteSizeSpan

绝对大小(文本字体)

DynamicDrawableSpan

设置图片,基于文本基线或底部对齐。

ImageSpan

图片

RelativeSizeSpan

相对大小(文本字体)

ReplacementSpan

父类。一般不用

ScaleXSpan

基于x轴缩放

StyleSpan

字体样式:粗体、斜体等

SubscriptSpan

下标(数学公式会用到)

SuperscriptSpan

上标(数学公式会用到)

TextAppearanceSpan

文本外貌(包含字体、大小、样式和颜色)

TypefaceSpan

文本字体

URLSpan

文本超链接

第二个和第三个參数分别表示文本中要设置成Span的某段文本的起始位置和终止位置的下一个字符的位置。也就是start和end。最后一个參数(flags)是一个标志。还能够设置例如以下几个类似的值:

Spanned.SPAN_EXCLUSIVE_INCLUSIVE:在 Span前面输入的字符不应用 Span的效果,在后面输入的字符应用Span效果。

Spanned.SPAN_INCLUSIVE_EXCLUSIVE:在 Span前面输入的字符应用
Span 的效果。在后面输入的字符不应用Span效果。

Spanned.SPAN_INCUJSIVE_INCLUSIVE:在 Span前后输入的字符都应用
Span 的效果。

应用实例:

因为篇幅限制关于SpannableString的应用实例可參考:Android开发之TextView高级应用在此就不再赘述了。

Android开发之SpannableString具体解释的更多相关文章

  1. Android开发之WebView具体解释

    概述: 一个显示网页的视图.这个类是你能够滚动自己的Web浏览器或在你的Activity中简单地显示一些在线内容的基础.它使用了WebKit渲染引擎来显示网页,包含向前和向后导航的方法(通过历史记录) ...

  2. Android开发之AlarmManager具体解释

    AlarmManager实质是一个全局的定时器,是Android中经常使用的一种系统级别的提示服务,在指定时间或周期性启动其他组件(包含Activity,Service,BroadcastReceiv ...

  3. Android开发之TextView高级应用

    Android开发之TextView高级应用 我们平时使用TextView往往让它作为一个显示文字的容器,但TextView的功能并不局限于此.以下就和大家分享一下TextView的一些使用技巧. A ...

  4. Android开发之InstanceState详解

    Android开发之InstanceState详解   本文介绍Android中关于Activity的两个神秘方法:onSaveInstanceState() 和 onRestoreInstanceS ...

  5. 【Android UI】Android开发之View的几种布局方式及实践

    引言 通过前面两篇: Android 开发之旅:又见Hello World! Android 开发之旅:深入分析布局文件&又是“Hello World!” 我们对Android应用程序运行原理 ...

  6. Android开发之InstanceState详解(转)---利用其保存Activity状态

    Android开发之InstanceState详解   本文介绍Android中关于Activity的两个神秘方法:onSaveInstanceState() 和 onRestoreInstanceS ...

  7. Android开发之旅2:HelloWorld项目的目录结构

    引言 前面Android开发之旅:环境搭建及HelloWorld,我们介绍了如何搭建Android开发环境及简单地建立一个HelloWorld项目,本篇将通过HelloWorld项目来介绍Androi ...

  8. Android开发之Java集合类性能分析

    对于Android开发者来说深入了解Java的集合类很有必要主要是从Collection和Map接口衍生出来的,目前主要提供了List.Set和 Map这三大类的集合,今天Android吧(ard8. ...

  9. Android开发之Git配置

    Android开发之Git配置 1.首先git配置: 输入命令: git config --global user.name "xxx.xx" git config --globa ...

随机推荐

  1. 洛谷 P1256 显示图像

    P1256 显示图像 题目描述 古老的显示屏是由N×M个像素(Pixel)点组成的.一个像素点的位置是根据所在行数和列数决定的.例如P(2,1)表示第2行第1列的像素点.那时候,屏幕只能显示黑与白两种 ...

  2. 将NSTimer加入至RunLoop中的两种方法差别

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launc ...

  3. “此文件来自其他计算机,可能被阻止以帮助保护该计算机” 教你win7解除阻止程序运行怎么操作

    win7 批量解除可执行文件的锁定 "此文件来自其他计算机,可能被阻止以帮助保护该计算机" http://blog.csdn.net/gscsnm/article/details/ ...

  4. @JSONField 注解说明

    转自:https://blog.csdn.net/suyimin2010/article/details/80617538 导入@JSONField 注解: import com.alibaba.fa ...

  5. golang 逐行读取文件

    package main import ( "bufio" "fmt" "io" "os" ) func main() ...

  6. Vue的学习--怎么在vue-cli中写网页

    vue.min.js和vue-cli的区别和联系我现在还是没有太清楚,大概是还没搞清楚export default和new Vue的区别,先浅浅记录一下怎么“用vue-cli来写网页”. “vue-c ...

  7. CISP/CISA 每日一题 九(2017-11-30 09:25)

    电子银行风险管理责任: 1.风险管理是董事会和高级管理层的责任 2.实施技术是信息技术高级管理层的责任 3.测量和监控风险是经营管理层的责任     管理层在实施一个新的电子银行应用程序之前要 ___ ...

  8. Servlet 规范笔记—servlet概念及结构

     Servlet, 这个词对java程序员并不陌生,我想几乎每个java程序员在学习J2EE知识时,首先学习的就是servlet,这是一种正确的学习方式,在我看来Servlet是J2EE的基础,要熟练 ...

  9. Jedis源码分析

    http://blog.csdn.net/luyee2010/article/details/17580381

  10. Codeforces Round #450 (Div. 2) D.Unusual Sequences (数学)

    题目链接: http://codeforces.com/contest/900/problem/D 题意: 给你 \(x\) 和 \(y\),让你求同时满足这两个条件的序列的个数: \(a_1, a_ ...