在Android中,TextView是我们最常用的用来显示文本的控件。

一般情况下,TextView中的文本都是一个样式。那么如何对于TextView中各个部分的文本来设置字体,大小,颜色,样式,以及超级链接等属性呢?下面我们通过SpannableString的具体实例操作来演示一下。

  1. package com.snowdream;
  2. import java.io.IOException;
  3. import org.xmlpull.v1.XmlPullParserException;
  4. import android.app.Activity;
  5. import android.content.res.ColorStateList;
  6. import android.content.res.XmlResourceParser;
  7. import android.graphics.Bitmap;
  8. import android.graphics.BitmapFactory;
  9. import android.graphics.Color;
  10. import android.graphics.drawable.Drawable;
  11. import android.os.Bundle;
  12. import android.text.SpannableString;
  13. import android.text.Spanned;
  14. import android.text.method.LinkMovementMethod;
  15. import android.text.style.AbsoluteSizeSpan;
  16. import android.text.style.BackgroundColorSpan;
  17. import android.text.style.BulletSpan;
  18. import android.text.style.DrawableMarginSpan;
  19. import android.text.style.ForegroundColorSpan;
  20. import android.text.style.IconMarginSpan;
  21. import android.text.style.ImageSpan;
  22. import android.text.style.RelativeSizeSpan;
  23. import android.text.style.ScaleXSpan;
  24. import android.text.style.StrikethroughSpan;
  25. import android.text.style.StyleSpan;
  26. import android.text.style.SubscriptSpan;
  27. import android.text.style.SuperscriptSpan;
  28. import android.text.style.TextAppearanceSpan;
  29. import android.text.style.TypefaceSpan;
  30. import android.text.style.URLSpan;
  31. import android.text.style.UnderlineSpan;
  32. import android.widget.TextView;
  33. public class TextViewLinkActivity extends Activity {
  34. TextView mTextView = null;
  35. SpannableString msp = null;
  36. /** Called when the activity is first created. */
  37. @Override
  38. public void onCreate(Bundle savedInstanceState) {
  39. super.onCreate(savedInstanceState);
  40. setContentView(R.layout.main);
  41. mTextView = (TextView)findViewById(R.id.myTextView);
  42. //创建一个 SpannableString对象
  43. msp = new SpannableString("字体测试字体大小一半两倍前景色背景色正常粗体斜体粗斜体下划线删除线x1x2电话邮件网站短信彩信地图X轴综合/bot");
  44. //设置字体(default,default-bold,monospace,serif,sans-serif)
  45. msp.setSpan(new TypefaceSpan("monospace"), 0, 2, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
  46. msp.setSpan(new TypefaceSpan("serif"), 2, 4, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
  47. //设置字体大小(绝对值,单位:像素)
  48. msp.setSpan(new AbsoluteSizeSpan(20), 4, 6, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
  49. msp.setSpan(new AbsoluteSizeSpan(20,true), 6, 8, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);  //第二个参数boolean dip,如果为true,表示前面的字体大小单位为dip,否则为像素,同上。
  50. //设置字体大小(相对值,单位:像素) 参数表示为默认字体大小的多少倍
  51. msp.setSpan(new RelativeSizeSpan(0.5f), 8, 10, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);  //0.5f表示默认字体大小的一半
  52. msp.setSpan(new RelativeSizeSpan(2.0f), 10, 12, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);  //2.0f表示默认字体大小的两倍
  53. //设置字体前景色
  54. msp.setSpan(new ForegroundColorSpan(Color.MAGENTA), 12, 15, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);  //设置前景色为洋红色
  55. //设置字体背景色
  56. msp.setSpan(new BackgroundColorSpan(Color.CYAN), 15, 18, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);  //设置背景色为青色
  57. //设置字体样式正常,粗体,斜体,粗斜体
  58. msp.setSpan(new StyleSpan(android.graphics.Typeface.NORMAL), 18, 20, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);  //正常
  59. msp.setSpan(new StyleSpan(android.graphics.Typeface.BOLD), 20, 22, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);  //粗体
  60. msp.setSpan(new StyleSpan(android.graphics.Typeface.ITALIC), 22, 24, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);  //斜体
  61. msp.setSpan(new StyleSpan(android.graphics.Typeface.BOLD_ITALIC), 24, 27, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);  //粗斜体
  62. //设置下划线
  63. msp.setSpan(new UnderlineSpan(), 27, 30, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
  64. //设置删除线
  65. msp.setSpan(new StrikethroughSpan(), 30, 33, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
  66. //设置上下标
  67. msp.setSpan(new SubscriptSpan(), 34, 35, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);     //下标
  68. msp.setSpan(new SuperscriptSpan(), 36, 37, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);   //上标
  69. //超级链接(需要添加setMovementMethod方法附加响应)
  70. msp.setSpan(new URLSpan("tel:4155551212"), 37, 39, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);     //电话
  71. msp.setSpan(new URLSpan("mailto:webmaster@google.com"), 39, 41, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);     //邮件
  72. msp.setSpan(new URLSpan("http://www.baidu.com"), 41, 43, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);     //网络
  73. msp.setSpan(new URLSpan("sms:4155551212"), 43, 45, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);     //短信   使用sms:或者smsto:
  74. msp.setSpan(new URLSpan("mms:4155551212"), 45, 47, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);     //彩信   使用mms:或者mmsto:
  75. msp.setSpan(new URLSpan("geo:38.899533,-77.036476"), 47, 49, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);     //地图
  76. //设置字体大小(相对值,单位:像素) 参数表示为默认字体宽度的多少倍
  77. msp.setSpan(new ScaleXSpan(2.0f), 49, 51, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); //2.0f表示默认字体宽度的两倍,即X轴方向放大为默认字体的两倍,而高度不变
  78. //设置字体(依次包括字体名称,字体大小,字体样式,字体颜色,链接颜色)
  79. ColorStateList csllink = null;
  80. ColorStateList csl = null;
  81. XmlResourceParser xppcolor=getResources().getXml (R.color.color);
  82. try {
  83. csl= ColorStateList.createFromXml(getResources(),xppcolor);
  84. }catch(XmlPullParserException e){
  85. // TODO: handle exception
  86. e.printStackTrace();
  87. }catch(IOException e){
  88. // TODO: handle exception
  89. e.printStackTrace();
  90. }
  91. XmlResourceParser xpplinkcolor=getResources().getXml(R.color.linkcolor);
  92. try {
  93. csllink= ColorStateList.createFromXml(getResources(),xpplinkcolor);
  94. }catch(XmlPullParserException e){
  95. // TODO: handle exception
  96. e.printStackTrace();
  97. }catch(IOException e){
  98. // TODO: handle exception
  99. e.printStackTrace();
  100. }
  101. msp.setSpan(new TextAppearanceSpan("monospace",android.graphics.Typeface.BOLD_ITALIC, 30, csl, csllink), 51, 53, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
  102. //设置项目符号
  103. msp.setSpan(new BulletSpan(android.text.style.BulletSpan.STANDARD_GAP_WIDTH,Color.GREEN), 0 ,msp.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); //第一个参数表示项目符号占用的宽度,第二个参数为项目符号的颜色
  104. //设置图片
  105. Drawable drawable = getResources().getDrawable(R.drawable.icon);
  106. drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());
  107. msp.setSpan(new ImageSpan(drawable), 53, 57, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
  108. mTextView.setText(msp);
  109. mTextView.setMovementMethod(LinkMovementMethod.getInstance());
  110. }
  111. }

http://blog.csdn.net/jdsjlzx/article/details/19122103

Android TextView中文字通过SpannableString来设置超链接、颜色、字体等属性的更多相关文章

  1. TextView-属性大全(设置超链接颜色)

    今天想要修改一个textview下的超链接的颜色值,自己当时在网上搜了一下,结果看到的全是怎么给一个textview中的部分内容设置颜色.下划线等.当时就以为在textview属性里面可能不存在设定超 ...

  2. Android TextView中图文混排设置行间距导致高度不一致问题解决

    最近项目中需要实现一个评论带表情的功能,刚开始一切顺利,非常easy,突然有一天发现文字跟表情混排的时候,TextView中图文高度不一致,excuse...什么鬼,之前明明测试过图文混排,不存在这个 ...

  3. Android TextView 中实现部分文字变色以及点击事件

    首先要想实现文字变色以及点击,都需要使用到SpannableStringBuilder,实例化该类也很简单,只需将你想要处理的字符串当做参数 SpannableStringBuilder spanna ...

  4. Android TextView部分文字实现点击事件

    This is the class for text whose content and markup can both be changed. (这是一个内容和标记都可以更改的文本类) 快速实现 直 ...

  5. Android TextView自动换行文字排版参差不齐的原因

    今天项目没什么进展,公司后台出问题了.看了下刚刚学习Android时的笔记,发现TextView会自动换行,而且排版文字参差不齐.查了下资料,总结原因如下: 1.半角字符与全角字符混乱所致:这种情况一 ...

  6. Android TextView中实现点击文本超链接(无下划线)的封装类

    android中有的时候须要在TextView上设置一些超链接,点击这些超链接时进行一些操作.比如新浪微博上的一些keyword,点击时会跳转到对应的页面. 怎样实现我们就直接看源代码吧. /** * ...

  7. Android 代码中文字在手机上显示乱码问题解决方法

    在学习Android过程中,用于测试时发现,代码中的中文在真机上会显示乱码, 网上查阅了些资料,参考如下: http://www.androidchina.net/3024.html http://b ...

  8. Android 的实现TextView中文字链接的4种方法

    Android 的实现TextView中文字链接的方式有很多种. 总结起来大概有4种: 1.当文字中出现URL.E-mail.电话号码等的时候,可以将TextView的android:autoLink ...

  9. Android Textview实现文字颜色渐变效果

    最近做应用的时候遇到一个需求,一行文字的颜色需要一个渐变效果 如上所有 从左到有逐渐变化,自己写了一个demo实现上述效果 package com.huwei.example.test; import ...

随机推荐

  1. C# 循环语句 for循环

    循环:反复执行某段代码. 循环四要素:初始条件,循环条件,循环体,状态改变.for(初始条件;循环条件;状态改变){ 循环体} 给出初始条件,先判断是否满足循环条件,如果不满足条件则跳过for语句,如 ...

  2. BaseServlet

    1. 目的: 将提升Servlet的处理请求的能力,而不只限于doGet()/doPost()等请求. 让其Servlet能够自己根据请求,从而触发相应的方法进行处理. 2. 具体代码实现: impo ...

  3. C++模板元编程

    ABC

  4. CSS选择器特殊性与重要性

    特殊性 在编写CSS代码的时候,我们会出现多个样式规则作用于同一个元素的情况,例如 <!-- HTML --> <header> <nav class="nav ...

  5. 使用div创建选取框

    使用div实现了选取框效果. 代码如下 <!DOCTYPE html> <html> <head> <title>myCanvasTest</ti ...

  6. 滴滴DSRC抢楼大赛,十一快车券飞起来

    十一马上就要到了 不管你想要去哪里 总少不了滴滴打车 DSRC为你准备了30份快车券 现在开始参与抢楼,就有机会得到 活动时间: 本帖发布之时起-9月30日12:00 参与方式: 关注微信公众号“滴滴 ...

  7. IOS xib在tableview上的简单应用(通过xib自定义cell)

    UITableView是一种常用的UI控件,在实际开发中,由于原生api的局限,自定义UITableViewCell十分重要,自定义cell可以通过代码,也可以通过xib. 这篇随笔介绍的是通过xib ...

  8. 自定义组件 -- android联系人

    在android开发中,常常有联系人页面,在这篇和大家分享一下项目中刚刚添加的联系人页面,代码直接从项目中提取出来,没有太多时间修改:使用 StickyListHeaders-master 开源项目及 ...

  9. CoreAnimation-08-CATransition

    概述 简介 CATransition又称转场动画,是CAAnimation的子类,可以直接使用 转场动画主要用于为图层提供移入/移出屏幕的动画效果 转场动画常见的应用是UINavigationCont ...

  10. eclipse执行单元测试报CreateProcess error=87的解决方法

    原因是classpath的路径过长导致,在网上看了很多文章,发现解决方法有2种: 1.更改项目路径 或者 maven本地库的路径,减少classpath的深度. 2.由于这是eclipse自身的bug ...