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

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

34资源网2022年01月06日 21:05883
目录
  • 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

      分享给朋友:

      相关文章

      阳台盆栽种什么比较好养?这九种植物非常适合阳台种植
      阳台盆栽种什么比较好养?这九种植物非常适合阳台种植

      阳台盆栽种什么比较好养?在阳台养花种菜的小伙伴,肯定知道下面这9种植物,今天我就选出来9种有花,也有水果,个人认为好养,而且下面还有三种水果还比较好吃,家里到时候不用买水果了。1、矮牵牛矮牵牛一直都是非常受欢迎的盆栽花卉,它们有着七彩的花色...

      女装加盟哪个品牌可靠?艾丽哲这个牌子不错哦
      女装加盟哪个品牌可靠?艾丽哲这个牌子不错哦

      女装行业一直发展都不错,女装加盟哪个品牌可靠?在众多的女装品牌当中,艾丽哲女装凭借优良的口碑和超高的人气,在行业当中占有一定的优势,是好的,当中非常可靠的品牌,在激烈的市场当中,凭借超高的实力,得到了无数加盟商的认可,赚钱轻松,发展潜力大,...

      用混然一体造句,分享7句用浑然一体造句的句子
      用混然一体造句,分享7句用浑然一体造句的句子

      (1)曹县实验中学的兆老师在黑板上写上了成语“混然一体”。(2)雷雷不会写成语“混然一体”的最后一个字。(3)练习本的第二页写着“混然一体”几个大字。(4)小画写不出成语“混然一体”,因此期中考试只有98分。(5)雄宇叔叔给粉光和一齐讲述了...

      谈2022年平衡发展策略,我们要平衡的发展
      谈2022年平衡发展策略,我们要平衡的发展

      2022年解决方案的第二个关键词叫平衡。我们要平衡的发展,长期的发展。你的个人生活,你的公司事业,还有国家的形势,我觉得一定要平衡的去发展,不能说我只赚钱,身体就搞垮,或者说我只赚快钱,但是不关心国家的形势。你看,密室逃脱这个行业,上周国家...

      直播间里“拆盲盒”,二手电商平台「Whatnot」拆出15亿美元丨快鲤鱼海外
      直播间里“拆盲盒”,二手电商平台「Whatnot」拆出15亿美元丨快鲤鱼海外

      靠着直播带货和“拆盲盒”,二手潮品电商平台 Whatnot 在今年已经完成了3轮融资,公司估值达到 15 亿美元,成立2年便跻身独角兽之列。 通过商品认证转卖、直播拍卖、直播间开“盲盒”等看似有点“中国味”的玩儿法,Whatnot一改美国...

      华为小米革了康佳长虹们的命,海信怎么办?
      华为小米革了康佳长虹们的命,海信怎么办?

      编者按:本文来自陆玖财经,创业邦经授权发布。 电视行业真正需要面对的不是“大屏好还是小屏好”,用激光、OLED还是Mini LED之类的技术路线之争,而是一旦被视为“智能终端”,从产品形态到竞争模式的翻天覆地。 近日,海信子品牌Vidd...