文档章节

Android TextView中文字通过SpannableString来设置超链接、颜色、字体等属性

王国龙_成长
 王国龙_成长
发布于 2013/02/08 19:00
字数 920
阅读 3457
收藏 5

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

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

   res-layout-main.xml

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_height="wrap_content" android:layout_width="wrap_content" android:orientation="horizontal">
  4. <TextView
  5. android:id="@+id/myTextView"
  6. android:layout_width="fill_parent"
  7. android:layout_height="wrap_content"
  8. />
  9. </LinearLayout>

res-color-color.xml

res-color-linkcolor.xml

view plainprint?

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <selector xmlns:android="http://schemas.android.com/apk/res/android">
  3. <item android:state_pressed="true"
  4. android:color="#ffffff00"/> <!-- pressed -->
  5. <item android:state_focused="true"
  6. android:color="#ff00ffff"/> <!-- focused -->
  7. <item android:color="#ff0ff000"/> <!-- default -->
  8. </selector>

TextViewLinkActivity

view plainprint?

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

© 著作权归作者所有

上一篇: 马尔可夫模型
王国龙_成长
粉丝 16
博文 35
码字总数 55131
作品 0
南昌
私信 提问
TextView的日常使用技巧

Textview在日常开发工作中使用非常频繁,在这里简单总结一下其比较重要的用法。目标是设置textview的中一段文字的显示属性,例如指定文字要下划线显示(@XXX、#XXX#),文字替换成图片,文字...

zhiweiofli
2013/07/05
505
0
SpannableStringUtil实现丰富文字效果

前言 在android开发中,我们不免会用到 TextView 的各种显示效果,如字体样式,颜色,大小,背景等。今天要讲的就是这么一个工具类SpannableStringUtil,方便快捷的实现各种文字效果。 今天涉...

奔跑的佩恩
02/27
0
0
Android TextView中文字通过SpannableString来设置超链接、颜色、字体等属

在Android中,TextView是我们最常用的用来显示文本的控件。 一般情况下,TextView中的文本都是一个样式。那么如何对于TextView中各个部分的文本来设置字体,大小,颜色,样式,以及超级链接等...

Erichkko
2015/11/12
189
0
android:TextView中的文本链接之--点击链接跳转总结(2种方法+2个实例应用)

最近做了一些东西,涉及到比较重要些的技术点有:TextView正则匹配、文本链接、点击链接页面跳转,外加一个链接文本去掉默认的下划线。其实大部分都是从技术文档上学到的,应用了一下。便于以...

z.net
2012/11/18
310
0
TextView 组件本身可以显示URL,EMAIL等特殊信息,这些特殊信息都会以连接形式显示...

public class AndrodTActivity extends Activity implements OnClickListener { TextView tv_; TextView tv1; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate......

带梦想一7飞
2013/04/11
84
1

没有更多内容

加载失败,请刷新页面

加载更多

黑客之道-40本书籍助你快速入门黑客技术免费下载

场景 黑客是一个中文词语,皆源自英文hacker,随着灰鸽子的出现,灰鸽子成为了很多假借黑客名义控制他人电脑的黑客技术,于是出现了“骇客”与"黑客"分家。2012年电影频道节目中心出品的电影...

badaoliumang
2分钟前
0
0
很遗憾,没有一篇文章能讲清楚线程的生命周期!

(手机横屏看源码更方便) 注:java源码分析部分如无特殊说明均基于 java8 版本。 简介 大家都知道线程是有生命周期,但是彤哥可以认真负责地告诉你网上几乎没有一篇文章讲得是完全正确的。 ...

彤哥读源码
29分钟前
1
0
jquery--DOM操作基础

本文转载于:专业的前端网站➭jquery--DOM操作基础 元素的访问 元素属性操作 获取:attr(name);$("#my").attr("src"); 设置:attr(name,value);$("#myImg").attr("src","images/1.jpg"); ......

前端老手
今天
4
0
Django的ChoiceField和MultipleChoiceField错误提示,选择一个有效的选项

在表单验证时提示错误:选择一个有效的选项 例如有这样一个表单: class ProductForm(Form): category = fields.MultipleChoiceField( widget=widgets.SelectMultiple(), ...

编程老陆
今天
5
0
Vue核心概念及特性 (一)

Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式框架。 > 特点: 易用,灵活,高效,渐进式框架。 > 可以随意组合需要用到的模块 vue + components + vue-router + vuex + v...

前端优选
今天
11
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部