`

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

 
阅读更多

在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

  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

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

分享到:
评论
1 楼 lenomon 2012-03-12  
这篇文字也许对你有些用,Android使用TextView实现无下划线超链接

相关推荐

    Android SpannableString设置超链接、颜色、字体等属性

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

    Android TextView中文字设置超链接、颜色、字体

    首先,设置超链接是通过`android:text`属性或者使用`SpannableString`来完成的。当我们在TextView的文本中插入URL时,可以使用`android:autoLink="web"`属性,让系统自动识别并转换为可点击的超链接。但这种方法可能...

    Android TextView中文字通过SpannableString设置属性用法示例

    `SpannableString` 是一个可变的字符串,它可以携带多个`Span`对象,每个`Span`对象代表一个文本属性,例如字体样式、颜色等。 以下是一些关键的`Span`子类及其用途: 1. **TypefaceSpan**:用于改变文本的字体。...

    TextView自定义字体,风格,超链接等效果

    本文将详细讲解如何通过编程实现TextView的字体、颜色、行距、样式、独立样式、内部超链接以及与图片共存的效果。 首先,让我们关注字体的设置。在Android中,可以通过`setTypeface()`方法来改变TextView的字体。这...

    Android中使用SpannableString实现百度超链接的代码清单.pdf

    SpannableString是Android提供的一个类,它允许我们对字符串进行格式化,包括设置字体颜色、大小、样式等,同时也能实现超链接效果。本篇文章将详细介绍如何使用SpannableString在Android中实现百度超链接。 首先,...

    TextView超链接自定义样式

    在XML布局文件中,我们也可以设置`android:textColorLink`属性来改变所有链接的颜色,设置`android:textColorHighlight`来改变选中链接的颜色。例如: ```xml &lt;TextView android:id="@+id/textView" android:...

    Android 使用SpannableString在TextView中插入表情、超链接、文字变大、加粗Demo下载

    在Android开发中,文本展示是常见的需求之一,而TextView作为主要的文本展示控件,有时候我们需要在其中实现更丰富的展示效果,比如插入表情、添加超链接、改变文字大小和加粗等。本教程将深入讲解如何利用...

    Android TextView使用SpannableString设置复合文本的方法详解

    在Android开发中,TextView是用于显示文本的基本组件。然而,有时我们需要对文本进行更复杂的样式化,例如设置特定部分的背景色、添加点击事件、改变颜色等。这时,我们可以使用SpannableString类来实现这些需求。...

    android textview 文字排版 换行

    3. **链接文本**:`TextView`支持超链接,通过`android:autoLink`开启,`android:textColorLink`设置链接颜色。 ```xml android:autoLink="web" android:textColorLink="@color/colorAccent" ``` 4. **自定义...

    android通过设置文字超链接启动activity

    它允许我们在同一字符串的不同部分设置不同的属性,如字体颜色、大小、下划线等,甚至可以附加动作,比如点击事件。`SpannableString`继承自`CharSequence`,这意味着它可以像普通字符串一样使用,同时还能添加额外...

    安卓textView相关-TextView的超链接字和不同色彩效果.rar

    它不仅可以展示纯文本,还可以实现一些高级功能,如设置超链接、不同颜色的文本效果等。本资源包"安卓textView相关-TextView的超链接字和不同色彩效果.rar"包含了一些关于如何在`TextView`中实现这些特性的示例和...

    android TextView文字效果

    - XML中,使用`android:textColor`属性来设置颜色,如`android:textColor="#FF0000"`(红色)。 4. **下划线**: - 若要添加下划线,可以使用`android:textDecorationLine`属性。例如,`android:...

    Android TextView 控件例子

    - `android:textColor`: 设置字体颜色,可以使用颜色值(如"#FF0000")或颜色资源引用(如"@color/my_color")。 - `android:textStyle`: 设置字体样式,如`bold`、`italic`或`bold_italic`。 - `android:...

    TextView上超链接可以点击.zip

    为了使超链接有明显的视觉区别,我们还可以通过`ForegroundColorSpan`改变链接的字体颜色,例如: ```java ss.setSpan(new ForegroundColorSpan(Color.BLUE), start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); ``` ...

    20多种TextView文字效果例子.zip

    那么如何对于TextView中各个部分的文本来设置字体,大小,颜色,样式,以及超级链接等属性呢?下面我们通过SpannableString的具体实例操作来演示一下。   关键方法: public void setSpan (Object what, int ...

    Android TextView

    - 设置字体颜色:`android:textColor`属性用于设置文本的颜色,可以使用颜色资源ID或十六进制颜色值。 2. **样式和格式化** - 文本样式:`android:textStyle`可以设置文本为粗体、斜体或粗斜体。 - 文本对齐:`...

    TextView超链接启动Activity,无下划线,可自定义颜色

    首先,我们需要在XML布局文件中创建一个TextView,并设置好基本属性,例如字体大小、颜色等。然后,我们可以使用`android:autoLink`属性开启自动链接,如`autoLink="web"`来识别URL并自动转换为超链接。然而,这种...

    TextView使用SpannableString设置复合文本 SpannableString实现TextView的链接效果

    Android 系统通过 SpannableString 类来对指定文本进行相关处理,具体有以下功能: 1. 背景色(BackgroundColorSpan) 2. 文本可点击,有点击事件(ClickableSpan) 3. 文本颜色(ForegroundColorSpan) 4. 修饰...

Global site tag (gtag.js) - Google Analytics