Android Typeface字体默认/后备

sjk*_*jkm 2 fonts android

我使用自定义字体绘制(画布)文本(确切地说:我使用自定义字体).但是,此字体不支持许多字符,因此某些(不受支持的)字符看起来不同.现在我问自己以下问题:

  • 不受支持的角色如何看起来 - 外观取决于系统设置/所有设备上的外观是否相同?
  • 什么(默认)字体用于不支持的字符?(不支持的字母与最终支持的字母具有相同的尺寸吗?)

sjk*_*jkm 5

我挖掘了Android代码并希望发布我的发现:

Typeface.class实例是使用的静态创建的方法创建的Typeface.class(createFromAsset/createFromFile /创建/等).然后该实例保存一个字体列表(不可修改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实例.如果您的自定义字体不支持您想要绘制的某些字符(/您在文本中使用的字符),则系统会尝试使用fallback-fonts.这些后备字体由FontLoader.class(来自system-xml)从系统加载.