android 自定义span_Android Span详解

引子

Android中的Span之前用的很少,接触多了以后,发现Span还是相当有趣的。

Span的命名即使不是最差劲的,也是最差劲的之一吧,第一眼看去完全不知道这个类是干嘛的😆。Span字面的意思是“跨度”、“区间”、“范围”,这完全词不达意,一脸懵😳。

在Android中,Span用来定义文本的样式。通过Span可以改变几个文字的颜色,让它们可点击,缩放文字大小甚至绘制自定义的项目符号点。

Span的价值是,可以将这些样式作用在字符级别或者段落级别。

那现在反过来,如果我来写一个这种功能的类,有没有更好的命名呢?呃~ 呃~ 呃~,好像google 大佬的命名还挺香~~~

本文主要分4部分介绍、总结下Span(大部分直接翻译了google文档😶),(1)Span的使用哲学,(2)Framework中提供的Span武器库,明晰有哪些样式可以直接使用,(3)如果系统未提供样式,如何自定义Span,(4)使用Span的最佳实践。

Span的使用哲学

Span是专门用来增强TextView样式的,Span通过改变TextPaint属性,在Canvas上绘制,甚至是改变文本的布局和影响像行高这样的元素,来改变文本样式。它可以被应用到部分或整段的文本中。

TextView有样式属性,为什么还需要Span?

通过XML属性或者代码设置就可以改变文本样式,但是效果必须作用于整个文本,如果要在部分文本上使用特殊样式就无能无力了,例如像下面这种:

image.png

Span就是解决这种需求的,Span样式可以作用于字符或者段落级别的文本。

通常使用的套路是样式属性和Span组合使用,可以考虑将设置给TextView的样式属性作为一种“基本”样式,而 Span样式是应用在基本样式“之上”并且会覆盖基本样式的样式。例如,当给一个 TextView 设置了 textColor=”@color.blue” 属性且设置开头4个字符应用了 ForegroundColorSpan(Color.PINK),则开头4个字符会使用 span 设置的粉色,而其他文本使用 TextView 属性设置的颜色。具体API使用,自行google,或者查看github的Span Sample。

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:textColor="@color/blue"/>

SpannableString spannable = new SpannableString(“Text styling”);

spannable.setSpan(

new ForegroundColorSpan(Color.PINK),

0, 4,

Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

myTextView.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值