基本用法就是
记录一下常用的文本样式备忘。
private void test1() {
SpannableString s = new SpannableString("12345测试文本4008208820");
Drawable drawable = getResources().getDrawable(R.drawable.icon); // 获得图片的实例
drawable.setBounds(0,0,100,100); // 设置图片的大小
ImageSpan imageSpan = new ImageSpan(drawable); // 初始化图片样式,也有传bitmap类型的构造方法
// 第二个参数和第三个参数是表示要让文本的哪部分改为我们所设置的样式,如下面写的0,1就会让文本中的1改为图片
// 正确使用这个方法可以让图片插入文本的任意位置
s.setSpan(imageSpan, 0, 1, ImageSpan.ALIGN_CENTER);
tv1.setText(s); // 设置文本
}
private void test2(){
SpannableString s = new SpannableString("12345测试文本4008208820");
ForegroundColorSpan colorSpan = new ForegroundColorSpan(Color.parseColor("#ffcc99")); // 构造方法传入指定的颜色
s.setSpan(colorSpan, 0,5, SPAN_EXCLUSIVE_EXCLUSIVE);
tv2.setText(s);
}
private void test3(){
SpannableString s = new SpannableString("12345测试文本4008208820");
BackgroundColorSpan colorSpan = new BackgroundColorSpan(Color.parseColor("#ffcc99")); // 构造方法传入指定的颜色
s.setSpan(colorSpan, 0,5, SPAN_EXCLUSIVE_EXCLUSIVE);
tv3.setText(s);
}
private void test4(){
SpannableString s = new SpannableString("12345测试文本4008208820");
// BOLD加粗,ITALIC斜体,BOLD_ITALIC加粗+斜体,NORMAL普通
StyleSpan styleSpan = new StyleSpan(Typeface.BOLD);
s.setSpan(styleSpan, 0,5, SPAN_EXCLUSIVE_EXCLUSIVE);
tv4.setText(s);
}
private void test5(){
SpannableString s = new SpannableString("12345测试文本4008208820");
UnderlineSpan underlineSpan = new UnderlineSpan(); // 添加下划线
s.setSpan(underlineSpan, 0, 5, SPAN_EXCLUSIVE_EXCLUSIVE);
StrikethroughSpan strikethroughSpan = new StrikethroughSpan(); // 添加删除线
s.setSpan(strikethroughSpan, 5,9, SPAN_EXCLUSIVE_EXCLUSIVE);
tv5.setText(s);
}
private void test6(){
SpannableString s = new SpannableString("12345测试文本4008208820");
SubscriptSpan subscriptSpan = new SubscriptSpan(); // 文本变成上标
s.setSpan(subscriptSpan, 0, 5, SPAN_EXCLUSIVE_EXCLUSIVE);
SuperscriptSpan superscriptSpan = new SuperscriptSpan(); //文本变成下标
s.setSpan(superscriptSpan, 9, 19, SPAN_EXCLUSIVE_EXCLUSIVE);
tv6.setText(s);
}
private void test7() {
SpannableString s = new SpannableString("12345测试文本4008208820");
RelativeSizeSpan relativeSizeSpan = new RelativeSizeSpan(2.0f); // 设置相对字体大小,参数是默认大小的倍数,2.0就是两倍大小
s.setSpan(relativeSizeSpan, 0, 5, SPAN_EXCLUSIVE_EXCLUSIVE);
AbsoluteSizeSpan absoluteSizeSpan = new AbsoluteSizeSpan(20, true); // 设置绝对字体大小,第一个参数是px,如果第二个参数为true,则为dp
s.setSpan(absoluteSizeSpan, 5, 8, SPAN_EXCLUSIVE_EXCLUSIVE);
ScaleXSpan scaleXSpan = new ScaleXSpan(2.0f); // 设置字体宽度,只让字体变宽但是不会变长,参数是默认大小的倍数
s.setSpan(scaleXSpan, 9,12, SPAN_EXCLUSIVE_EXCLUSIVE);
tv7.setText(s);
}
private void test8(){
SpannableString s = new SpannableString("12345测试文本4008208820");
URLSpan urlSpan = new URLSpan("tel:4008208820"); // 电话超链接
URLSpan urlSpan1 = new URLSpan("http://www.baidu.com"); // 网页超链接
s.setSpan(urlSpan, 9, 19, SPAN_EXCLUSIVE_EXCLUSIVE);
s.setSpan(urlSpan1, 0, 5, SPAN_EXCLUSIVE_EXCLUSIVE);
tv8.setText(s);
tv8.setMovementMethod(LinkMovementMethod.getInstance()); // 如果不添加这一行,超链接不能点击
}
Android使用SpannableString实现多行文字开头放置标签图案_thw_m的博客-CSDN博客
https://blog.csdn.net/thw_m/article/details/90691889
Android中TextView通过SpannableString设置字体、大小、颜色、样式、超级链接_lukejun1988的专栏-CSDN博客
https://blog.csdn.net/lukejunandroid/article/details/25892737
Spanned.SPAN_EXCLUSIVE_EXCLUSIVE的含义 - 简书
https://www.jianshu.com/p/10cfabf503e3