我使用自定义字体(准确地说:我使用自定义字体)绘制( 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/

    10-12 00:22
    查看更多