注册 登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

是缘是情是童真

如果你用笑脸面对 你会看见别人的笑脸

 
 
 

日志

 
 

android中用Spannable在TextView中设置超链接、颜色、字体  

2011-12-28 11:04:15|  分类: 默认分类 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

TextView是用来显示文本的,有时需要给TextView中的个别字设置为超链接,或者设置个别字的颜色、字体等,那就需要用到Spannable对象,可以借助Spannable对象实现以上设置。


res-layout-main.xml: 
Java代码  收藏代码
  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: 

Java代码  收藏代码
  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: 

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


效果预览: 
android中用Spannable在TextView中设置超链接、颜色、字体 - 小瞎米 - 小瞎米
 

参考:http://aichixihongshi.iteye.com/blog/1207503
  评论这张
 
阅读(3753)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018