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

文章目录

  • 基本用法总结
    • 1. 文本添加图片
    • 2. 字体变色
    • 3. 添加字体背景颜色
    • 4. 字体加粗斜体
    • 5. 下划线和删除线
    • 6. 文本上标下标
    • 7. 字体大小和字体宽度
    • 8. 超链接
  • 参考材料

基本用法总结

基本用法就是

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

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

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

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

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

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

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

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

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()); // 如果不添加这一行,超链接不能点击
}

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

参考材料

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

你可能感兴趣的:(Android,实际问题)