Android 在 TextView 中设置超链接、颜色、字体、图片

Android 在 TextView 中设置超链接、颜色、字体、图片_第1张图片

方案:通过spannablestring实现textview的丰富调控

Note:

1. 文本中的空格可通过 <string name=”blank_space”>&#160;&#160;&#160;&#160;img</string>实现

参考代码如下:

001 import java.io.IOException;
002  
003 import org.xmlpull.v1.XmlPullParserException;
004  
005 import android.app.Activity;
006 import android.content.res.ColorStateList;
007 import android.content.res.XmlResourceParser;
008 import android.graphics.Bitmap;
009 import android.graphics.BitmapFactory;
010 import android.graphics.Color;
011 import android.graphics.drawable.Drawable;
012 import android.os.Bundle;
013 import android.text.SpannableString;
014 import android.text.Spanned;
015 import android.text.method.LinkMovementMethod;
016 import android.text.style.AbsoluteSizeSpan;
017 import android.text.style.BackgroundColorSpan;
018 import android.text.style.BulletSpan;
019 import android.text.style.DrawableMarginSpan;
020 import android.text.style.ForegroundColorSpan;
021 import android.text.style.IconMarginSpan;
022 import android.text.style.ImageSpan;
023 import android.text.style.RelativeSizeSpan;
024 import android.text.style.ScaleXSpan;
025 import android.text.style.StrikethroughSpan;
026 import android.text.style.StyleSpan;
027 import android.text.style.SubscriptSpan;
028 import android.text.style.SuperscriptSpan;
029 import android.text.style.TextAppearanceSpan;
030 import android.text.style.TypefaceSpan;
031 import android.text.style.URLSpan;
032 import android.text.style.UnderlineSpan;
033 import android.widget.TextView;
034  
035 public class TextViewLinkActivity extends Activity {
036     TextView mTextView = null;
037     SpannableString msp = null
038  
039     /** Called when the activity is first created. */
040     @Override
041     public void onCreate(Bundle savedInstanceState) {
042         super.onCreate(savedInstanceState);
043         setContentView(R.layout.main);
044  
045         mTextView = (TextView)findViewById(R.id.myTextView);
046  
047         //创建一个 SpannableString对象
048         msp = new SpannableString("字体测试字体大小一半两倍前景色背景色正常粗体斜体粗斜体下划线删除线x1x2电话邮件网站短信彩信地图X轴综合/bot");
049  
050         //设置字体(default,default-bold,monospace,serif,sans-serif)
051         msp.setSpan(new TypefaceSpan("monospace"), 02, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
052         msp.setSpan(new TypefaceSpan("serif"), 24, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
053  
054         //设置字体大小(绝对值,单位:像素)
055         msp.setSpan(new AbsoluteSizeSpan(20), 46, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
056         msp.setSpan(new AbsoluteSizeSpan(20,true), 68, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);  //第二个参数boolean dip,如果为true,表示前面的字体大小单位为dip,否则为像素,同上。
057  
058         //设置字体大小(相对值,单位:像素) 参数表示为默认字体大小的多少倍
059         msp.setSpan(new RelativeSizeSpan(0.5f), 810, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);  //0.5f表示默认字体大小的一半
060         msp.setSpan(new RelativeSizeSpan(2.0f), 1012, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);  //2.0f表示默认字体大小的两倍
061  
062         //设置字体前景色
063         msp.setSpan(new ForegroundColorSpan(Color.MAGENTA), 1215, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);  //设置前景色为洋红色
064  
065         //设置字体背景色
066         msp.setSpan(new BackgroundColorSpan(Color.CYAN), 1518, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);  //设置背景色为青色
067  
068         //设置字体样式正常,粗体,斜体,粗斜体
069         msp.setSpan(new StyleSpan(android.graphics.Typeface.NORMAL), 1820, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);  //正常
070         msp.setSpan(new StyleSpan(android.graphics.Typeface.BOLD), 2022, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);  //粗体
071         msp.setSpan(new StyleSpan(android.graphics.Typeface.ITALIC), 2224, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);  //斜体
072         msp.setSpan(new StyleSpan(android.graphics.Typeface.BOLD_ITALIC), 24,27, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);  //粗斜体
073  
074         //设置下划线
075         msp.setSpan(new UnderlineSpan(), 2730, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
076  
077         //设置删除线
078         msp.setSpan(new StrikethroughSpan(), 3033, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
079  
080         //设置上下标
081         msp.setSpan(new SubscriptSpan(), 3435, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);     //下标
082         msp.setSpan(new SuperscriptSpan(), 3637, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);   //上标           
083  
084         //超级链接(需要添加setMovementMethod方法附加响应)
085         msp.setSpan(new URLSpan("tel:4155551212"), 3739, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);     //电话
086         msp.setSpan(new URLSpan("mailto:[email protected]"), 3941, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);     //邮件
087         msp.setSpan(new URLSpan("http://www.baidu.com"), 4143, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);     //网络
088         msp.setSpan(new URLSpan("sms:4155551212"), 4345, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);     //短信   使用sms:或者smsto:
089         msp.setSpan(new URLSpan("mms:4155551212"), 4547, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);     //彩信   使用mms:或者mmsto:
090         msp.setSpan(new URLSpan("geo:38.899533,-77.036476"), 4749, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);     //地图  
091  
092         //设置字体大小(相对值,单位:像素) 参数表示为默认字体宽度的多少倍
093         msp.setSpan(new ScaleXSpan(2.0f), 4951, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); //2.0f表示默认字体宽度的两倍,即X轴方向放大为默认字体的两倍,而高度不变
094  

你可能感兴趣的:(android,exception,String,null,sms,电话)