Note:
—Use TextView to display strings, different sizes, different colors, special effect styles, hyperlinks...
Show results:
TextViewLinkActivity.java
-------------------------
...
public static final String tv = "我们渴望像安迪一样成功,却未必能付出像小曲一样的努力;我们希望能过得像小曲一样随性,却常常只能像关关一样拘束;我们想要和关关一样有大家闺秀的气质,却遇事只能像小蚯蚓一样头脑一热不管不顾;我们许愿自己能如同小蚯蚓般单纯直接,却往往都是像樊姐一样思虑过多;我们想要自己学会樊姐的善解人意,却总是更像安迪不善交往。";
private TextView mTextView;
...
/**
*
* 设置字体特效
*
*/
private void textviewLink() {
String mText_1 = "安迪";
String mText_2 = "小曲";
String mText_3 = "关关";
String mText_4 = "小蚯蚓";
String mText_5 = "樊姐";
String mText_6 = "大家闺秀";
String mText_7 = "单纯直接";
String mText_8 = "不管不顾";
String mText_9 = "善解人意";
String mText_10 = "随性";
String mText_11 = "拘束";
int mIndex_1 = tv.indexOf(mText_1);
int mIndex_2 = tv.indexOf(mText_2);
int mIndex_3 = tv.indexOf(mText_3);
int mIndex_4 = tv.indexOf(mText_4);
int mIndex_5 = tv.indexOf(mText_5);
int mIndex_6 = tv.indexOf(mText_6);
int mIndex_7 = tv.indexOf(mText_7);
int mIndex_8 = tv.indexOf(mText_8);
int mIndex_9 = tv.indexOf(mText_9);
int mIndex_10 = tv.indexOf(mText_10);
int mIndex_11 = tv.indexOf(mText_11);
int tv_length = tv.length();
//创建一个 SpannableString对象
SpannableString sp = new SpannableString(tv);
/**************************** 设置字体及大小 ************************************/
/*** 字体 ***/
//设置字体(default,default-bold,monospace,serif,sans-serif)
sp.setSpan(new TypefaceSpan("sans-serif"), mIndex_1, mIndex_1 + mText_1.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
/*** 1 ***/
//设置字体大小(绝对值,单位:像素)
sp.setSpan(new AbsoluteSizeSpan(30), mIndex_1, mIndex_1 + mText_1.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
sp.setSpan(new AbsoluteSizeSpan(40), mIndex_2, mIndex_2 + mText_2.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
/*** 2 ***/
//第二个参数boolean dip,如果为true,表示前面的字体大小单位为dip,否则为像素,同上。
sp.setSpan(new AbsoluteSizeSpan(20, true), mIndex_3, mIndex_3 + mText_3.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
sp.setSpan(new AbsoluteSizeSpan(26, true), mIndex_4, mIndex_4 + mText_4.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
/*** 3 ***/
//设置字体大小(相对值,单位:像素) 参数表示为默认字体大小的多少倍
//1.5f表示默认字体大小的1.5倍
sp.setSpan(new RelativeSizeSpan(1.5f), mIndex_5, mIndex_5 + mText_5.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
/*** 字体宽度 ***/
//设置字体大小(相对值,单位:像素) 参数表示为默认字体宽度的多少倍
//2.0f表示默认字体宽度的两倍,即X轴方向放大为默认字体的两倍,而高度不变
sp.setSpan(new ScaleXSpan(2.0f), mIndex_8, mIndex_8 + mText_8.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
/**************************** 设置字体颜色 ************************************/
/*** 前景色-洋红色 ***/
sp.setSpan(new ForegroundColorSpan(Color.MAGENTA), mIndex_1, mIndex_1 + mText_1.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
/*** 背景色-青色 ***/
sp.setSpan(new BackgroundColorSpan(Color.CYAN), mIndex_2, mIndex_2 + mText_2.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
/**************************** 设置字体样式 ************************************/
/*** 正常 ***/
sp.setSpan(new StyleSpan(android.graphics.Typeface.NORMAL), mIndex_3, mIndex_3 + mText_3.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
/*** 粗体 ***/
sp.setSpan(new StyleSpan(android.graphics.Typeface.BOLD), mIndex_4, mIndex_4 + mText_4.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
/*** 斜体 ***/
sp.setSpan(new StyleSpan(android.graphics.Typeface.ITALIC), mIndex_5, mIndex_5 + mText_5.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
/*** 粗斜体 ***/
sp.setSpan(new StyleSpan(android.graphics.Typeface.BOLD_ITALIC), mIndex_9, mIndex_9 + mText_9.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
/*** 下划线 ***/
sp.setSpan(new UnderlineSpan(), mIndex_8, mIndex_8 + mText_8.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
/*** 删除线 ***/
sp.setSpan(new StrikethroughSpan(), mIndex_7, mIndex_7 + mText_7.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
/*** 下标 ***/
sp.setSpan(new SubscriptSpan(), mIndex_10, mIndex_10 + mText_10.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
/*** 上标 ***/
sp.setSpan(new SuperscriptSpan(), mIndex_11, mIndex_11 + mText_11.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
/**************************** 设置字体超链接 ************************************/
//超级链接(需要添加setMovementMethod方法附加响应)
/*** 电话 ***/
sp.setSpan(new URLSpan("tel:13166325064"), mIndex_1, mIndex_1 + mText_1.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
/*** 邮件 ***/
sp.setSpan(new URLSpan("mailto:[email protected]"), mIndex_2, mIndex_2 + mText_2.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
/*** 网络 ***/
sp.setSpan(new URLSpan("http://blog.csdn.net/github_35033182/"), mIndex_3, mIndex_3 + mText_3.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
/*** 短信 使用sms:或者smsto: ***/
sp.setSpan(new URLSpan("sms:13166325064"), mIndex_4, mIndex_4 + mText_4.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
/*** 彩信 使用mms:或者mmsto: ***/
sp.setSpan(new URLSpan("mms:13166325064"), mIndex_5, mIndex_5 + mText_5.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
/*** 地图 ***/
sp.setSpan(new URLSpan("geo:38.899533,-77.036476"), mIndex_6, mIndex_6 + mText_6.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
/**************************** 设置项目符号 ************************************/
//第一个参数表示项目符号占用的宽度,第二个参数为项目符号的颜色
sp.setSpan(new BulletSpan(android.text.style.BulletSpan.STANDARD_GAP_WIDTH, Color.GREEN), 0, sp.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
/**************************** 设置图片 ************************************/
//第一个参数表示项目符号占用的宽度,第二个参数为项目符号的颜色
Drawable drawable = getResources().getDrawable(R.drawable.icon_16_09);
drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());
sp.setSpan(new ImageSpan(drawable), tv_length - 1, tv_length, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
mTextView.setText(sp);
//设置字体可点击
mTextView.setMovementMethod(LinkMovementMethod.getInstance());
}