我使用自定义字体(准确地说:我使用自定义字体)绘制( Canvas )文本。但是,这种字体不支持很多字符,因此一些(不受支持的)字符看起来不同。现在我问自己以下问题:
最佳答案
我仔细研究了 Android 代码并想发布我的发现:
Typeface.class 实例是使用 Typeface.class (createFromAsset/createFromFile/create/etc.) 的静态创建方法创建的。然后该实例包含一个字体列表(不可修改的 List<Font>
)。此列表的第一个元素是主字体(指定),其他元素(索引:1 - (size-1))是从 FontLoader.class ( getFallBackFonts()
) 检索的默认字体
其中, Paint.class / Canvas.class ( drawText()
) 使用 Typeface.class 实例来绘制文本(测量字符/绘制/等)。他们尽可能使用主字体( Typeface.mFonts[0]
)。如果在主字体中找不到字符,那么他们会尝试使用后备字体 ( Typeface.mFonts[1]
- Typeface.mFonts[size-1]
) 来测量和绘制字符。
结论
如果要使用自定义字体,可以使用 Typeface.class 实例。如果您的自定义字体不支持您想要绘制的某些字符(/您在文本中使用的),那么系统会尝试使用回退字体。这些后备字体由 FontLoader.class(来自 system-xml)从系统加载。
关于Android 字体字体默认/回退,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33899929/