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,如需转载请自行联系原作者




相关文章
|
4月前
|
XML API Android开发
码农之重学安卓:利用androidx.preference 快速创建一、二级设置菜单(demo)
本文介绍了如何使用androidx.preference库快速创建具有一级和二级菜单的Android设置界面的步骤和示例代码。
140 1
码农之重学安卓:利用androidx.preference 快速创建一、二级设置菜单(demo)
|
2月前
|
XML 存储 Java
浅谈Android的TextView控件
浅谈Android的TextView控件
43 0
|
3月前
|
XML 编解码 Android开发
安卓开发中的自定义视图控件
【9月更文挑战第14天】在安卓开发中,自定义视图控件是一种高级技巧,它可以让开发者根据项目需求创建出独特的用户界面元素。本文将通过一个简单示例,引导你了解如何在安卓项目中实现自定义视图控件,包括创建自定义控件类、处理绘制逻辑以及响应用户交互。无论你是初学者还是有经验的开发者,这篇文章都会为你提供有价值的见解和技巧。
55 3
|
3月前
|
Android开发
Android经典实战之Textview文字设置不同颜色、下划线、加粗、超链接等效果
本文介绍了 `SpannableString` 在 Android 开发中的强大功能,包括如何在单个字符串中应用多种样式,如颜色、字体大小、风格等,并提供了详细代码示例,展示如何设置文本颜色、添加点击事件等,助你实现丰富文本效果。
300 3
|
4月前
|
Java 网络安全 开发工具
UNITY与安卓⭐一、Android Studio初始设置
UNITY与安卓⭐一、Android Studio初始设置
|
3月前
|
图形学 iOS开发 Android开发
从Unity开发到移动平台制胜攻略:全面解析iOS与Android应用发布流程,助你轻松掌握跨平台发布技巧,打造爆款手游不是梦——性能优化、广告集成与内购设置全包含
【8月更文挑战第31天】本书详细介绍了如何在Unity中设置项目以适应移动设备,涵盖性能优化、集成广告及内购功能等关键步骤。通过具体示例和代码片段,指导读者完成iOS和Android应用的打包与发布,确保应用顺利上线并获得成功。无论是性能调整还是平台特定的操作,本书均提供了全面的解决方案。
160 0
|
4月前
|
前端开发 Android开发 开发者
安卓开发中的自定义视图:构建你的第一个控件
【8月更文挑战第26天】在安卓开发的浩瀚海洋中,自定义视图是一块充满魔力的乐土。它不仅是开发者展示创造力的舞台,更是实现独特用户体验的关键。本文将带你步入自定义视图的世界,从基础概念到实战应用,一步步教你如何打造自己的第一个控件。无论你是初学者还是有经验的开发者,这篇文章都将为你的开发之旅增添新的风景。
|
4月前
|
开发工具 Android开发
Android项目架构设计问题之外部客户方便地设置回调如何解决
Android项目架构设计问题之外部客户方便地设置回调如何解决
29 0
|
4月前
|
数据可视化 Java 数据挖掘
Android项目架构设计问题之设置RecyclerView的LayoutManager如何解决
Android项目架构设计问题之设置RecyclerView的LayoutManager如何解决
39 0
|
XML Android开发 数据格式
Android中利用shape属性自定义设置Button按钮
Android中利用shape属性自定义设置Button按钮
268 0