SpannableString的基本用法总结,文本加粗,下划线,上标下标,图片超链接等

基本用法总结

基本用法就是

  1. 创建一个SpannableString对象,填充文本
  2. 创建一个文本样式,
  3. 用setspan方法,将样式添加到文本中。

记录一下常用的文本样式备忘。

1. 文本添加图片

在这里插入图片描述

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); // 设置文本
}

在这里插入图片描述

2. 字体变色

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);
}

在这里插入图片描述

3. 添加字体背景颜色

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);
}

在这里插入图片描述

4. 字体加粗斜体

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);
}

在这里插入图片描述

5. 下划线和删除线

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);
}

在这里插入图片描述

6. 文本上标下标

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);
}

在这里插入图片描述

7. 字体大小和字体宽度


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);
}

在这里插入图片描述

8. 超链接

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

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值