当前位置:首页 > 谈天说地 > 正文内容

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

34资源网2022年01月06日 21:05914
目录
  • 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文本内容请搜索萬仟网以前的文章或继续浏览下面的相关文章希望大家以后多多支持萬仟网!

      看完文章,还可以用支付宝扫描下面的二维码领取一个支付宝红包,目前可领1-88元不等

      支付宝红包二维码

      除了扫码可以领取之外,大家还可以(复制 720087999 打开✔支付宝✔去搜索, h`o`n.g.包哪里来,动动手指就能领)。

      看下图所示是好多参与这次活动领取红包的朋友:

      支付宝红包

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

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

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

      分享给朋友:

      相关文章

      络绎不绝怎么造句?教你用络绎不绝造句
      络绎不绝怎么造句?教你用络绎不绝造句

      很多人不知道络绎不绝怎么造句?其实用络绎不绝造句有很多的,下面小编整理了29句用络绎不绝造句的句子,希望对大家有借鉴的作用。1) 月亮渐渐西落,我依依不舍地离开。但观灯的人还是络绎不绝,各种彩色的灯像天上的繁星一样,大放光彩。真是“一夜花灯...

      短视频文案素材哪里找(上热门的短视频素材)
      短视频文案素材哪里找(上热门的短视频素材)

      抖音怎么写文案?整理了100条抖音抖音爆款文案,直接套用就能火不看后悔系列!!!抖音上爆火的文案。情感、励志、共鸣、实用、反转、提问等6大类型不管你是拍摄什么类型视频 ,都可以直接套用。不多说直接上干货!!!一定要看到最后!!!01—励志类...

      联想新手机什么时候上市(联想2021即将上市新款笔记本)
      联想新手机什么时候上市(联想2021即将上市新款笔记本)

      11月8日,联想中国区手机业务部总经理发布了一则新机预告:摩托罗拉edge X的发布已进入倒计时阶段,在骁龙898处理器即将发布之际预告新机,很大可能预示着首发权已到手。而在双十一当天,陈劲又发布了一则微博,暗示摩托罗拉的全新手机已到手,“...

      融资丨「PPIO边缘云」完成亿元A1轮融资,刷新边缘云领域融资记录
      融资丨「PPIO边缘云」完成亿元A1轮融资,刷新边缘云领域融资记录

      创业邦获悉,近日,边缘云公司PPIO宣布完成过亿元A1轮融资,由创世伙伴、张江科投、磐霖资本等多家机构联合投资,Pre-A轮投资方蓝驰创投、沸点资本及华业天成继续追加投资,光源资本担任融资财务顾问。这是公司半年内再次获投资人支持,公司A2...

      现在农村做什么暴利比较好(农村适合的创业项目推荐)
      现在农村做什么暴利比较好(农村适合的创业项目推荐)

      在农村农民买东西的主要途径是农村赶集,这时候很多人会批发了东西来到农村集上去卖,这属小本暴利行业,可以赚不少钱。那么,农村赶集摆摊什么暴利?赶集卖什么利润大?下面一起来了解一下。 在农村赶集也是有不少工具可以售卖的,无外乎想要销量好的最...

      怎么关闭windows防火墙(win7取消防火墙的方法)
      怎么关闭windows防火墙(win7取消防火墙的方法)

      许多使用联想Win10系统的小合作伙伴不知道如何关闭防火墙。短关灯防火墙对计算机影响不大。还有一个第三方反病毒软件。下一个小编将教你教你去联想Win10系统防火墙关闭。 1,单击设置,输入“控制面板“打开”控制面板“。 2.找到“Wi...