文档章节

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

Erichkko
 Erichkko
发布于 2015/11/12 19:24
字数 919
阅读 188
收藏 3

在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. }


© 著作权归作者所有

Erichkko
粉丝 6
博文 42
码字总数 84782
作品 0
苏州
私信 提问
SpannableStringUtil实现丰富文字效果

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

奔跑的佩恩
02/27
0
0
TextView的日常使用技巧

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

zhiweiofli
2013/07/05
504
0
Android TextView中文字通过SpannableString来设置超链接、颜色、字体等属性

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

王国龙_成长
2013/02/08
3.5K
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
Android项目实战(一): SpannableString与SpannableStringBuilder(转)

前言: 曾经在一些APP中的一些类似“帮助”“关于”的界面看过一行文字显示不同的颜色的效果,如下效果: 本软件是一款高、大、上的社区类软件。 一般来说,这应该是由一个TextView来显示的,...

听着music睡
2014/11/13
0
0

没有更多内容

加载失败,请刷新页面

加载更多

STM32进阶之串口环形缓冲区实现

队列的概念 在此之前,我们来回顾一下队列的基本概念: 队列 (Queue):是一种先进先出(First In First Out ,简称 FIFO)的线性表,只允许在一端插入(入队),在另一端进行删除(出队)。 队列...

杰杰1号
6分钟前
2
0
设计模式-建造者模式

建造者模式 定义 将一个复杂对象的构建和它的表示分离,使得同样的构建过程创建出不同的表示。这句话理解起来优点抽象,我们打个简单的比方吧,中国人都喜欢做菜,做菜的时候后会放很多配料...

木本本
9分钟前
3
0
017、xml版本代码生成器配置

1、在pom.xml文件中增加mybatis-generator-maven-plugin插件 <build> <plugins> <plugin> <groupId>org.mybatis.generator</groupId> <artifactId>......

北岩
22分钟前
3
0
用jQuery-Easy-UI编写注册页面

本文转载于:专业的前端网站➮用jQuery-Easy-UI编写注册页面 1 <!DOCTYPE html> 2 <html lang="en"> 3 4 <head> 5 <meta charset="UTF-8"> 6 <meta name="viewport" content=......

前端老手
30分钟前
2
0
Git ssh配置

生成密钥对 ssh-keygen -t rsa -C "email@email.com"邮箱替换自己邮箱在地址C:\Users\账户\.ssh下,id_rsa、id_rsa.pub两个文件复制文件id_rsa.pub内容到github\gitlab的Settings-> SSH ......

JUKE
37分钟前
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部