美文网首页
Android Span 架构介绍

Android Span 架构介绍

作者: wyonxue | 来源:发表于2018-10-25 23:22 被阅读0次

    前言

    Android Span架构具备强大的能力,是像Drawable那样强大的。一个应用中文本是非常重要的组成部分,基本上无处不在,掌握Span架构能让应用中文本表现的更灵活更丰富,更富表现力。

    框架

    主要层级
    • CharacterStyle 影响字符级别的文本格式
    • UpdateAppearance 影响字符级别的文本外观
    • UpdateLayout 影响字符级别的文本测量大小
    • ParagraphStyle 影响段落级别的文本格式
    FontMetrics
    FontMetrics1.png FontMetrics2.png
    类图
    • CharacterStyle UpdateAppearance UpdateLayout

      Span.png
    • ParagraphStyle

      ParagraphStyle.png

    工作原理

    当调用TextView.setText(...),内部会适用Layout管理文本测量计算和渲染,它有三个子类:

    • BoringLayout 负责显示单行文本,提供有isBoring()用于判断是否单行文本
    • DynamicLayout 负责渲染Spannable,内部会设置SpanWatcher侦听Span的变化,当产生变化时,会调用reflow,重新进行布局
    • StaticLayout 单行文本,且非Spannable的时候,不会监听span变化,效率较DynamicLayout高.里面处理了换行.
    • Layout.draw()会负责文本的绘制,其中drawBackground会递归LineBackgroundSpan并调用lineBackgroundSpan.drawBackground来进行背景的绘制.
    • drawText则会首先通过TextLine.obtain()生成TextLine,如果是文本,则调用canvas.drawText绘制,如果包含了Spannble,emoji,则交给TextLine绘制.
    • TextLine#draw()会调用drawRun,进而调用handleRun()进行文本的渲染.
    • TextLayoutCache为了提高效率,在4.0之后加入.
    • 如果想要提升TextView的渲染效率,可以使用StaticLayout.

    使用

    关于各种span的使用可以参考这里
    Span样式示例代码
    Spans,一个强大的概念
    Android Span 架构介绍
    实现类似新浪微博帖子显示(2)——话题、@好友、表情解析工具类

    参考

    Android中的SpannableString,Spans以及TextView绘制原理

    相关文章

      网友评论

          本文标题:Android Span 架构介绍

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