前置知识点

字体行高

Android 底层通过获取字体文件内的参数计算得到该字体推荐使用的行高。

可以通过 Paint.getFontMetrics 获取。

output.png

其中 baseline 是文字绘制时的基线,canvas通过这条线为基准执行绘制指令,ascent 与 descent 是基于 baseline 的偏移量(向上为正,向下为负),行高由两者求差得到。

Fallback 机制

Android 里单个字体资源文件通常并不能满足所有字符显示需求,实际工作时是由多个字体文件组合,并通过字体 Fallback 机制决定某个字符所对应的字形。

076b15c4-877f-4525-8216-0bbe299037c6.svg

FallbackLineSpacing 作用

字体推荐的行高是字体文件内定义的参数,不同的字体文件也不一定相同。该属性的作用是在文本测量与绘制时选择性禁用 Fallback 字体的行高。

  • android:fallbackLineSpacing="true"

开启 fallback 字体行高(系统默认

系统在计算某行文字的行高时会对该行所有字符的 ascent 与 descent 取绝对值最大值,计算最终的行高。

此选项会导致 多语言混合排版高度不一 等问题

  • android:fallbackLineSpacing="false"

关闭 fallback 字体行高

系统在计算某行文字的行高时始终使用 BaseFamily 的 ascent 与 descent,作为最终的行高。

此选项可能会导致 文字裁切、重叠 等问题