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

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

34资源网2022-01-061055
目录
  • 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

      分享给朋友:

      相关文章

      下午出去相了个亲,女方真心挺好看的

      下午出去相了个亲,女方真心挺好看的

      今天和往常有点不一样,因为今天我出去相亲了,说实话,相亲对我来说,还是挺害怕的,毕竟自己以前相亲每次都碰壁了,而且基本都是女方看不上我。纠结,可能颜值不好看吧,这也没辙,谁叫我长得难看呢。…

      情浓时,海誓山盟;情淡时,形同陌路

      情浓时,海誓山盟;情淡时,形同陌路

      1、如果一个人影响到了你的情绪,你的焦点应该放在控制自己的情绪上,而不是影响你情绪的人身上。只有这样,才能真正自信起来。…

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

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

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

      圣诞节送女生什么礼物好?送女朋友比较合适的礼物分享

      圣诞节送女生什么礼物好?送女朋友比较合适的礼物分享

      圣诞节送女生什么礼物好?可以送口红、围巾、衣服、化妆品、暖手宝等。有些人还会亲自动手为女朋友做一些创意小礼物,这样就更加贴心了,如果你有女朋友,不知道该送什么好的话,下面小编为大家推荐几种可以送女朋友的礼物,好好看下吧。…

      视频号入口在哪里(视频号直播入口新手手册)

      视频号入口在哪里(视频号直播入口新手手册)

      视频号助手在哪里?视频号助手什么时候上线?微信视频号助手正式上线目前微信视频号助手已经开始内测使用了,大家可以直接在PC端扫码登录,管理自己的视频号,可以看到自己的各项动态数据,非常方便管理。 视频号助手在哪里 视频号助手在哪里? 手机微…

      腾讯奖励员工21亿港元股票;爱奇艺被曝大规模裁员;抖音短剧开启付费模式;豆瓣被约谈,所有小组回复功能已暂停丨文娱周报

      腾讯奖励员工21亿港元股票;爱奇艺被曝大规模裁员;抖音短剧开启付费模式;豆瓣被约谈,所有小组回复功能已暂停丨文娱周报

      整理丨解夏 编辑丨及轶嵘 本周(2021.11.26-12.3)值得关注的文娱热点新闻:微信可直接打开淘宝、抖音;抖音短剧开启付费模式 ;爱奇艺被曝大规模裁员;腾讯两大事业群同时调整副总裁;腾讯发21亿港元股票奖励;豆瓣被约谈,所有小组回复…