装载自博客园Developer_Kale的博文
http://www.cnblogs.com/tianzhijiexian/p/4222393.html

使用Spannable接口实现TextView文本的多样风格

Android的TextView提供了textAppearance属性可以统一控制该TextView内所有文本的颜色/大小/文字风格等。

    "match_parent"        android:layout_height="match_parent"        android:textAppearance="@android:style/TextAppearance"/>    

想要改变同一个TextView内文本具有不一样的文字呈现样式,例如播放歌曲歌词的颜色逐个字的色彩变化,则通过Android Spannable接口的setSpan(Object what, int start, int end, int flags)便可以对一行文本设置各种想要的效果了,这里的what就是效果名,start和end是设置这个样式针对的是文本的字符位置。

使用SpannableString/SpannableStringBuilder

SpannableString以及SpannableStringBuilder都实现了Spannable接口,不同点在于SpannableString对象的文本内容是immutable不可更改的,而SpannableStringBuilder对象的文本内容和文本样式都可以更改。这里简要介绍SpannableString的使用,效果图:

Android 实现不同样式风格的CharSequence_第1张图片

// 创建一个 SpannableString对象,        // SpannableString implements GetChars,Spannable,CharSequence        SpannableString msp = new SpannableString("测试文字字体大小一半两倍前景色背景色正常粗体斜体粗斜体下划线删除线x1x2电话邮件网站短信彩信地图X轴综合");        // setSpan会将start到end这间的文本设置成创建的span格式。span可以是图片格式。        // 设置字体(default,default-bold,monospace,serif,sans-serif)        msp.setSpan(new TypefaceSpan("monospace"), 0, 2, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); // 等宽字体        msp.setSpan(new TypefaceSpan("serif"), 2, 4, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); // 衬线字体        // 设置字体绝对大小(绝对值,单位:像素)        msp.setSpan(new AbsoluteSizeSpan(20), 4, 6, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);        // 第二个参数boolean dip,如果为true,表示前面的字体大小单位为dip,否则为像素,同上。        msp.setSpan(new AbsoluteSizeSpan(20, true), 6, 8, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);        // 设置字体相对大小(相对值,单位:像素) 参数表示为默认字体大小的多少倍        msp.setSpan(new RelativeSizeSpan(0.5f), 8, 10, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); // 0.5f表示默认字体大小的一半        msp.setSpan(new RelativeSizeSpan(2.0f), 10, 12, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); // 2.0f表示默认字体大小的两倍        // 设置字体前景色 ,Color.MAGENTA为紫红        msp.setSpan(new ForegroundColorSpan(Color.MAGENTA), 12, 15, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); // 设置前景色为洋红色        // 设置字体背景色 ,Color.CYAN为青绿色        msp.setSpan(new BackgroundColorSpan(Color.CYAN), 15, 18, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); // 设置背景色为青色        // 设置字体样式正常,粗体,斜体,粗斜体        msp.setSpan(new StyleSpan(android.graphics.Typeface.NORMAL), 18, 20, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); // 正常        msp.setSpan(new StyleSpan(android.graphics.Typeface.BOLD), 20, 22, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); // 粗体        msp.setSpan(new StyleSpan(android.graphics.Typeface.ITALIC), 22, 24, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); // 斜体        msp.setSpan(new StyleSpan(android.graphics.Typeface.BOLD_ITALIC), 24, 27, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); // 粗斜体        // 设置下划线        msp.setSpan(new UnderlineSpan(), 27, 30, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);        // 设置删除线        msp.setSpan(new StrikethroughSpan(), 30, 33, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);        // 设置上下标        msp.setSpan(new SubscriptSpan(), 34, 35, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); // 下标        msp.setSpan(new SuperscriptSpan(), 36, 37, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); // 上标        // 超级链接(需要添加setMovementMethod方法附加响应)        msp.setSpan(new URLSpan("tel:4155551212"), 37, 39, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); // 电话        msp.setSpan(new URLSpan("mailto:webmaster@google.com"), 39, 41, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); // 邮件        msp.setSpan(new URLSpan("http://www.baidu.com"), 41, 43, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); // 网络        msp.setSpan(new URLSpan("sms:4155551212"), 43, 45, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); // 短信,使用sms:或者smsto:        msp.setSpan(new URLSpan("mms:4155551212"), 45, 47, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); // 彩信,使用mms:或者mmsto:        msp.setSpan(new URLSpan("geo:38.899533,-77.036476"), 47, 49, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); // 地图        // 设置字体大小(相对值,单位:像素) 参数表示为默认字体宽度的多少倍        msp.setSpan(new ScaleXSpan(2.0f), 49, 51, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); // 2.0f表示默认字体宽度的两倍,即X轴方向放大为默认字体的两倍,而高度不变

更多相关文章

  1. Android 复制文本
  2. Android: 绘制的文本如何排版
  3. 实现对特定内容改变字体颜色的TextView
  4. android字体工作原理
  5. 【Based Android】让你的android应用使用可爱的iphone备忘录字体
  6. Roboto 字体以及 Android 4.0 Ice Cream Sandwich 的设计理念
  7. android:限制文本长度加省略号用ellipsize
  8. Android使用第三方字体
  9. Android TextView设置自动识别的超链接字体颜色,及自身点击事件无

随机推荐

  1. Android应用名称多行显示
  2. 开源整理(持续更新)
  3. 【Android】Handler 工作流程
  4. Android录音并实时转成MP3格式
  5. Android(安卓)Studio中如何解决重复依赖
  6. Android之简易音乐播放器,MediaPlayer的使
  7. android学习笔记之多线程学习
  8. 蓝牙协议
  9. Android开发者指南(9) ―― ProGuard
  10. 解决谷歌Android SDK下载慢的问题