Android TextView中文字通过SpannableString来设置超链接、颜色、字体等属性 在Android中,TextView是我们最常用的用来显示文本的控件。

简介:

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

 

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


 

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




    本文转自 一点点征服   博客园博客,原文链接:http://www.cnblogs.com/ldq2016/p/5555796.html,如需转载请自行联系原作者




相关文章
|
3天前
|
XML API Android开发
码农之重学安卓:利用androidx.preference 快速创建一、二级设置菜单(demo)
本文介绍了如何使用androidx.preference库快速创建具有一级和二级菜单的Android设置界面的步骤和示例代码。
23 1
码农之重学安卓:利用androidx.preference 快速创建一、二级设置菜单(demo)
|
18天前
|
Java 网络安全 开发工具
UNITY与安卓⭐一、Android Studio初始设置
UNITY与安卓⭐一、Android Studio初始设置
|
2月前
|
XML Android开发 数据格式
Android 中如何设置activity的启动动画,让它像dialog一样从底部往上出来
在 Android 中实现 Activity 的对话框式过渡动画:从底部滑入与从顶部滑出。需定义两个 XML 动画文件 `activity_slide_in.xml` 和 `activity_slide_out.xml`,分别控制 Activity 的进入与退出动画。使用 `overridePendingTransition` 方法在启动 (`startActivity`) 或结束 (`finish`) Activity 时应用这些动画。为了使前 Activity 保持静止,可定义 `no_animation.xml` 并在启动新 Activity 时仅设置新 Activity 的进入动画。
48 12
|
10天前
|
开发工具 Android开发
Android项目架构设计问题之外部客户方便地设置回调如何解决
Android项目架构设计问题之外部客户方便地设置回调如何解决
12 0
|
10天前
|
数据可视化 Java 数据挖掘
Android项目架构设计问题之设置RecyclerView的LayoutManager如何解决
Android项目架构设计问题之设置RecyclerView的LayoutManager如何解决
17 0
|
Android开发
Android应用程序之间共享文字和图片(二)
MainActivity如下: package cn.testshare1; import java.io.File; import java.util.
679 0
|
Android开发 数据格式 XML
Android应用程序之间共享文字和图片(一)
以下为TestReceiveShare1工程 MainActivity如下: package cn.testreceiveshare1; import java.
852 0
|
2天前
|
测试技术 Linux Android开发
探索安卓开发之旅:从初学者到专家
【8月更文挑战第29天】本文是一篇为初学者和有一定经验的开发者准备的安卓开发指南。我们将从基础概念开始,逐步深入到高级主题,如自定义视图、性能优化等。无论你是刚刚入门,还是希望提升自己的技能,这篇文章都将为你提供有价值的信息和建议。让我们一起踏上这段激动人心的旅程吧!
|
1天前
|
供应链 物联网 区块链
未来触手可及:探索新兴技术的趋势与应用安卓开发中的自定义视图:从基础到进阶
【8月更文挑战第30天】随着科技的飞速发展,新兴技术如区块链、物联网和虚拟现实正在重塑我们的世界。本文将深入探讨这些技术的发展趋势和应用场景,带你领略未来的可能性。
|
2天前
|
存储 搜索推荐 Java
探索安卓开发中的自定义视图:打造个性化UI组件Java中的异常处理:从基础到高级
【8月更文挑战第29天】在安卓应用的海洋中,一个独特的用户界面(UI)能让应用脱颖而出。自定义视图是实现这一目标的强大工具。本文将通过一个简单的自定义计数器视图示例,展示如何从零开始创建一个具有独特风格和功能的安卓UI组件,并讨论在此过程中涉及的设计原则、性能优化和兼容性问题。准备好让你的应用与众不同了吗?让我们开始吧!