美文网首页
Android TextView 富文本之 android.te

Android TextView 富文本之 android.te

作者: d6f790205c2b | 来源:发表于2019-03-05 20:48 被阅读3次

前言

最近一直在做 TextView 富文本处理的工作,接触到了比较纤细的粗字体颜色内联图片处理 ellipsizeLinkMovementMethod 的坑ClickableSpan 的点击事件等问题,经过查资料看源码做实验三连之后,对 Android TextView 的富文本处理有了小小的体会,写篇博客总结下自己的收获,日后在遇到类似问题也方便回顾。

android.text.style

富文本相关的 xxxSpan 基本都在这个包下面啦,android-28 里的有 42 个文件,包含了各式各样设置字体自定义绘制点击事件段落样式的 Span。

1、CharacterStyle(来来来,你来挑画笔)

多数 Span 的基类,有一个抽象方法:
public abstract void updateDrawState(TextPaint tp);
TextPaint 继承自 Paint,这就给了我们一个机会去操纵画笔,设置前景色背景色字体颜色字体粗细字体大小等等等等,想怎么设置怎么设置。

设计:这里的用户名要单独加粗
我:好,加粗
设计:不行,这样太粗了,要那种比较纤细的粗
我:我 。。。

Paint.setFakeBoldText就适用于这种情况,这个方法其实就是把画笔变粗了而已,而不是使用粗体的字体,要更精细地控制画笔粗细可以用Paint.setStrokeWidth
附上解决问题链接:
如何实现 “中间这几个字要加粗,但是不要太粗,比较纤细的那种粗” ?

2、UpdateAppearance

image
这个接口是空的,只是用来标识的,表示 Span 会改变字体的外貌(颜色、形状等),
UpdateLayout 稍后说,其他的 Span 都实现 CharacterStyleupdateDrawState 方法,并对画笔进行设置,达到变换字体外观的目的。

3、ClickableSpan

增加了一个抽象方法public abstract void onClick(@NonNull View widget);,用于响应点击事件(需要外部配合,如 LinkMovementMethodOnTouchListener)。
URLSpan 继承自它,存储一个 URL,点击时用 startActivity 打开。

4、UpdateLayout

image
UpdateAppearance 一样是一个标识,从名字就能看出来,它还改变布局(位置、大小等),
唯一的继承类 MetricAffectingSpan有一个抽象方法
public abstract void updateMeasureState(@NonNull TextPaint textPaint);,用于改变字体的大小等属性。

5、ReplacementSpan (画布给你,你行你来画)

image
之前的 Span 我们只能设置 Paint,能做的事情很有限, ReplacementSpanMetricAffectingSpan更进一步,直接自己接管了绘制的任务,它有两个抽象方法public abstract int getSize(Paint paint, CharSequence text, int start, int end, Paint.FontMetricsInt fm);public abstract void draw(Canvas canvas, CharSequence text, int start, int end, float x, int top, int y, int bottom, Paint paint);分别用于确定绘制范围和绘制内容。这就使得ReplacementSpan有很大的灵活性,想画啥就画啥,经常用于画内联的图片之类的东西。

6、其他的 Span

ParagraphStyle相关的也有很多 Span,主要用于段落样式的处理,我也没用过,就不瞎说了

image
还有TtsSpanSuggestionSpanEasyEditSpanSpellCheckSpanSuggestionRangeSpan 。。。

最后

Android 提供了这么多 Span,我平时用的比较多的也就ReplacementSpanClickableSpanReplacementSpan用于现实自定义的 emoji 表情和内联的一些小图标之类的,ClickableSpan则用于自定义点击事件,比如在点击@Somebody#话题#查看图片等操作时,用本地的页面打开。这两个 Span 用的比较多,坑也比较多,接下来会专门对这两个 Span 做个稍微详细的总结。
Html.fromHtml实现的富文本处理其实也是利用 Android 提供的 Span 实现,只不过 TextView 支持的标签十分有限,做一些简单的处理还行,毕竟 TextView 主要显示文本嘛,干嘛整那么复杂。我平时用的时候也主要是用超链接,然后通过自定义的ClickableSpanRoute打开本地页面。

相关文章

  • Android TextView 富文本之 android.te

    前言 最近一直在做 TextView 富文本处理的工作,接触到了比较纤细的粗、字体颜色、内联图片、处理 ellip...

  • 整理开源项目

    Android 框架大全 富文本编辑 最理想邮件编辑效果效果 Advanced Android TextView ...

  • android学习之富文本

    android TextView可以用加载富文本,TextView本身不需要改动什么,只需要装入对加载的文本进行处...

  • Android TextView实现富文本

    TextView支持字号放大改变颜色添加链接等等富文本操作 示例: 更多支持的富文本标签请查看:android.j...

  • Android 富文本TextView

    一、怎么用? 先介绍TextView富文本的使用方法,TextView富文本显示主要有两种方式,一个是使用Span...

  • Android 富文本TextView

    Android 富文本TextView 项目中总会遇到一段文字中,部分文字颜色不同,字体大小不同,使用 Chara...

  • Android TextView 富文本之 ClickableS

    前言 ClickableSpan可以让我们在点击TextView相应文字时响应点击事件,比如常用的URLSpan,...

  • Android TextView 富文本之 ImageSpan

    前言 我们现在在 Android App 中几乎天天都能见到 ImageSpan,比如 App 自定义的 emoj...

  • Android富文本处理

    先上效果图 一、初识TextView富文本 接触Android以来,都不知道TextView能完成的事情原来不止于...

  • Android富文本的学习一

    1TextView的富文本介绍: 什么是富文本,大家都知道TextView可以显示文字,设置文字样式,利用富文本可...

网友评论

      本文标题:Android TextView 富文本之 android.te

      本文链接:https://www.haomeiwen.com/subject/qflauqtx.html