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

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

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

      版权声明:34楼发布

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

      分享给朋友:

      相关文章

      用共庆造句大全,30句分享

      用共庆造句大全,30句分享

      用共庆造句30句分享:(1)澳门回归,神州大地,共庆佳节,东方巨龙,巍然屹立,祖国之昌,需要你我,艰苦奋斗,祖国明天,定会美好,团结协作,再铸辉煌。…

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

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

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

      适合普通人做的小本创业点子

      适合普通人做的小本创业点子

      适合普通人做的小本创业生意有什么??随着零售行业的兴起,小型超市便利店生意成为创业者首选的项目之一,主要原因在于:投入资金小、回笼快,不需要太大的现金流来支撑、一年半左右就能回本。这对于拥有一部分闲置资金,想创业的投资者来说简直是很好的创业…

      华为、苹果,为何“盯”上二手机?

      华为、苹果,为何“盯”上二手机?

      图源:摄图网 编者按:本文来自微信公众号松果财经(ID:songguocaijing1),创业邦经授权转载 继苹果后,华为近日也正式官宣开启二手手机业务,并表示此举是为了提升电子产品的循环再利用。华为官方承诺所售二手手机均为正品且经过严格把…

      拉卡拉的卡拉如何OK?

      拉卡拉的卡拉如何OK?

      图源:摄图网 编者按:本文来自微信公众号财经无忌(ID:caijwj),作者:韦航,创业邦经授权转载 近日,中国新四大发明之一的移动支付,引起了舆论关注。 11月26日,一则“明年3月1日起,微信、支付宝个人收款码不能用于经营收款”的消息冲…

      第二家东南亚美股上市公司诞生,Grab为何上市即大跌?

      第二家东南亚美股上市公司诞生,Grab为何上市即大跌?

      编者按:本文来自微信公众号美股研究社(ID:meigushe),创业邦经授权转载 在很长一段时间内,来自新加坡、发家于东南亚市场的Sea(冬海集团)都被外界称为造富神话。并非因为其“东南亚小腾讯”的影子,而是其强大的游戏和电商业务支撑它制霸…