当前位置:首页 > 谈天说地

Android使用Span打造丰富多彩的文本详解

34资源网2022-01-061081
目录
  • 1.引言
  • 2.spannablestringbuilder的基本用法
  • 3.使用span给文本添加效果
    • 3.1 absolutesizespan
    • 3.2 backgroundcolorspan
    • 3.3 clickablespan
    • 3.4 drawablemarginspan
    • 3.5 dynamicdrawablespan
    • 3.6 foregroundcolorspan
    • 3.7 iconmarginspan
    • 3.8 imagespan
    • 3.9 maskfilterspan
    • 3.10 quotespan
    • 3.11 relativesizespan
    • 3.12 scalexspan
    • 3.13 strikethroughspan
    • 3.14 stylespan
    • 3.15 subscriptspan
    • 3.16 superscriptspan
    • 3.17 underlinespan()
  • 4.多个span组合使用
    • 5.总结

      1.引言

      在开发过程中经常需要使用文本,有时候需要对一段文字中的部分文字进行特殊的处理,如改变其中部分文字的大小、颜色、加下划线等,这个时候使用span就能方便地解决这些问题。本文将主要介绍spannablestringbuilder和各种span的使用。

      2.spannablestringbuilder的基本用法

      新建一个spannablestringbuilder对象的操作如下:

      spannablestringbuilder builder = new spannablestringbuilder("hello world!");

      spannablestringbuilder的setspan()方法如下:

      //what:各种文本span,如backgroundcolorspan、foregroundcolorspan等
      //start:应用span的文本的开始位置索引
      //end:应用span的文本的结束位置索引
      //flags:标志
      public void setspan(object what, int start, int end, int flags) {
          setspan(true, what, start, end, flags, true/*enforceparagraph*/);
      }

      3.使用span给文本添加效果

      3.1 absolutesizespan

      此span用来改变文本的绝对大小,示例如下:

      spannablestringbuilder builder = new spannablestringbuilder("hello world!");
      builder.setspan(new absolutesizespan(60),3,9, spannable.span_exclusive_inclusive);
      tv_content.settext(builder); 

      3.2 backgroundcolorspan

      此span用来改变文本的背景颜色大小,示例如下:

      spannablestringbuilder builder = new spannablestringbuilder("hello world!");
      builder.setspan(new backgroundcolorspan(color.green),3,9, spannable.span_exclusive_inclusive);
      tv_content.settext(builder);

      3.3 clickablespan

      此span用来给文本添加点击效果,示例如下:

      spannablestringbuilder builder = new spannablestringbuilder("hello world!");
      builder.setspan(new clickablespan() {
          @override
          public void onclick(@nonnull view widget) {
              toast.maketext(mainactivity.this,"clickablespan",toast.length_short).show();
          }
      }, 3, 9, spannable.span_exclusive_inclusive);
      tv_content.settext(builder);
      tv_content.setmovementmethod(linkmovementmethod.getinstance());
      tv_content.sethighlightcolor(color.transparent);

      3.4 drawablemarginspan

      此span用来给段落添加drawable和padding,这个padding指的是drawable和文本之间的距离,默认值是0,span要从文本的起始位置设置,否则span将不会渲染或者错误地渲染,示例如下:

      spannablestringbuilder builder = new spannablestringbuilder("hello world!");
      drawable drawable = appcompatresources.getdrawable(mainactivity.this,r.drawable.ic_launcher);
      builder.setspan(new drawablemarginspan(drawable,30), 0, builder.length(), spannable.span_exclusive_inclusive);
      tv_content.settext(builder);

      3.5 dynamicdrawablespan

      此span使用drawable替换文本内容,示例如下:

      spannablestringbuilder builder = new spannablestringbuilder("hello world!");
      builder.setspan(new dynamicdrawablespan() {
          @override
          public drawable getdrawable() {
             drawable drawable =             
             appcompatresources.getdrawable(mainactivity.this,r.drawable.ic_launcher);              
             drawable.setbounds(0,0,drawable.getintrinsicwidth(),drawable.getintrinsicheight());
             return drawable;
          }
      }, 3, 9, spannable.span_exclusive_inclusive);
      tv_content.settext(builder);

      3.6 foregroundcolorspan

      此span可以用来改变文本的颜色,示例如下:

      spannablestringbuilder builder = new spannablestringbuilder("hello world!");
      builder.setspan(new foregroundcolorspan(color.green), 3, 9, spannable.span_exclusive_inclusive);
      tv_content.settext(builder);

      3.7 iconmarginspan

      此span可以在文本开始的地方添加位图,而且可以在位图和文本之间设置padding,padding的默认值是0px,示例如下:

      spannablestringbuilder builder = new spannablestringbuilder("hello world!");
      bitmap bitmap = bitmapfactory.decoderesource(getresources(), r.drawable.ic_launcher);
      builder.setspan(new iconmarginspan(bitmap,30), 0, builder.length(), spannable.span_exclusive_inclusive);
      tv_content.settext(builder);

      3.8 imagespan

      此span可以使用drawable替换文本,创建imagespan的构造方法有很多,示例如下:

      spannablestringbuilder builder = new spannablestringbuilder("hello world!");
      builder.setspan(new imagespan(mainactivity.this,r.drawable.ic_launcher), 3, 9, spannable.span_exclusive_inclusive);
      tv_content.settext(builder);

      3.9 maskfilterspan

      此span可以给文本设置maskfilter,例如给文本设置模糊效果,示例如下:

      spannablestringbuilder builder = new spannablestringbuilder("hello world!");
      maskfilter maskfilter = new blurmaskfilter(10f, blurmaskfilter.blur.normal);
      builder.setspan(new maskfilterspan(maskfilter), 3, 9, spannable.span_exclusive_inclusive);
      tv_content.settext(builder);

      3.10 quotespan

      此span可以在文本开始的地方添加一个垂直的线条,示例如下:

      spannablestringbuilder builder = new spannablestringbuilder("hello world!");
      builder.setspan(new quotespan(color.green), 0, builder.length(), spannable.span_exclusive_inclusive);
      tv_content.settext(builder);

      3.11 relativesizespan

      此span可以按一定的比例缩放文本的大小,示例如下:

      spannablestringbuilder builder = new spannablestringbuilder("hello world!");
      builder.setspan(new relativesizespan(2.0f), 3, 9, spannable.span_exclusive_inclusive);
      tv_content.settext(builder);

      3.12 scalexspan

      此span以一定的系数在水平方向缩放文本的大小,示例如下:

      spannablestringbuilder builder = new spannablestringbuilder("hello world!");
      builder.setspan(new scalexspan(2.5f), 3, 9, spannable.span_exclusive_inclusive);
      tv_content.settext(builder);

      3.13 strikethroughspan

      此span可以在文本上添加下划线,示例如下:

      spannablestringbuilder builder = new spannablestringbuilder("hello world!");
      builder.setspan(new strikethroughspan(), 3, 9, spannable.span_exclusive_inclusive);
      tv_content.settext(builder);

      3.14 stylespan

      此span可以设置文本的样式,可用的样式有typeface.normal、typeface.bold、typeface.italic、typeface.bold_italic,示例如下:

      spannablestringbuilder builder = new spannablestringbuilder("hello world!");
      builder.setspan(new stylespan(typeface.bold), 3, 9, spannable.span_exclusive_inclusive);
      tv_content.settext(builder);

      3.15 subscriptspan

      此span可以将文本的基线移动到更低的地方,示例如下:

      spannablestringbuilder builder = new spannablestringbuilder("hello world!");
      builder.setspan(new subscriptspan(), 3, 9, spannable.span_exclusive_inclusive);
      tv_content.settext(builder);

      3.16 superscriptspan

      此span可以将文本的基线移动到更高的地方,示例如下:

      spannablestringbuilder builder = new spannablestringbuilder("hello world!");
      builder.setspan(new superscriptspan(), 3, 9, spannable.span_exclusive_inclusive);
      tv_content.settext(builder);

      3.17 underlinespan()

      此span可以在文本下面添加下划线,示例如下:

      spannablestringbuilder builder = new spannablestringbuilder("hello world!");
      builder.setspan(new underlinespan(), 3, 9, spannable.span_exclusive_inclusive);
      tv_content.settext(builder);

      4.多个span组合使用

      span不但可以单独使用,还可以组合在一起使用,以下示例演示了如何同时加粗文字,改变文字的颜色和添加下滑线:

      spannablestringbuilder builder = new spannablestringbuilder("hello world!");
      builder.setspan(new underlinespan(), 3, 9, spannable.span_exclusive_inclusive);
      builder.setspan(new foregroundcolorspan(color.green), 3, 9, spannable.span_exclusive_inclusive);
      builder.setspan(new stylespan(typeface.bold), 3, 9, spannable.span_exclusive_inclusive);
      tv_content.settext(builder);

      5.总结

      span的功能相当丰富,如改变文本颜色、大小、添加点击效果、加下划线等功能,本文介绍了经常用到的各种span,span支持单独使用和组合使用,使用它能够对文本进行各种灵活的操作,去实现个性化的需求。

      到此这篇关于android使用span打造丰富多彩的文本详解的文章就介绍到这了,更多相关android span文本内容请搜索萬仟网以前的文章或继续浏览下面的相关文章希望大家以后多多支持萬仟网!

      看完文章,还可以扫描下面的二维码下载快手极速版领4元红包

      快手极速版二维码

      快手极速版新人见面礼

      除了扫码领红包之外,大家还可以在快手极速版做签到,看视频,做任务,参与抽奖,邀请好友赚钱)。

      邀请两个好友奖最高196元,如下图所示:

      快手极速版邀请好友奖励

      扫描二维码推送至手机访问。

      版权声明:本文由34楼发布,如需转载请注明出处。

      本文链接:https://www.34l.com/post/4899.html

      分享给朋友:

      相关文章

      上海11月9日又新增一名新冠病毒感染者

      上海11月9日又新增一名新冠病毒感染者

      上海也不太平啊,据说昨天又新增了一例,这位新冠肺炎感染者是一名51岁的男性,具体请往下看吧。…

      工具人是什么意思,工具人是什么梗?

      工具人是什么意思,工具人是什么梗?

      最近网络上面出现比较多的一个词语就是“工具人”,那么,什么样的人会将他形容成是工具呢?这个是让网友们觉得比较的好奇的,主要是指的什么?在微博上面经常看到有网络语工具人这样的表达,所以引起了很多网友的关注,想要了解这个词语,那么工具人是什么意…

      手机拍视频软件哪个好用(新手拍好人像摄影技巧)

      手机拍视频软件哪个好用(新手拍好人像摄影技巧)

      每一个热爱生活的人都关注了“手机摄影技巧”…

      电脑微信可以发多大的视频(视频超过40分钟发送步骤)

      电脑微信可以发多大的视频(视频超过40分钟发送步骤)

      虽然腾讯在短视频领域迟迟未能取得优势,微视也很难撼动抖音、快手等头部APP的地位,但一直以来都未放弃这块蛋糕。 2021年二季度,随着微信以及Wechat活跃用户账户达到12.5亿,微信视频号的成长空间也被进一步拉大。而腾讯也很可能在短视频…

      融资丨「镭昱半导体」获千万美元Pre-A轮融资,全彩Micro-LED微显示芯片助力元宇宙发展

      融资丨「镭昱半导体」获千万美元Pre-A轮融资,全彩Micro-LED微显示芯片助力元宇宙发展

      创业邦获悉,近日,镭昱半导体(Raysolve)宣布完成千万美元Pre-A轮融资,由高榕资本领投,耀途资本跟投,泰合资本担任独家财务顾问。至此,在短短半年内,镭昱半导体完成两轮融资,累计获得投资近亿元人民币。本轮融资将用于公司的全球首款标准…