安卓应用设置备用字体

4
我正在开发一个需要支持多种语言的应用程序,其中包括一些旧版Android不包含字体的语言。
同一个TextView可以有多种语言的内容,因此设置单个TypeFace不能解决问题,我需要有一个备选字体列表,以便在首选字体中找不到某些字符时使用。
扩展到此,如果可能的话,我还需要为其他元素(不仅仅是TextView)使用相同的一组字体。

你找到解决方案了吗? - Thomas Vos
@SuperThomasLab,请查看我发布的答案。 - nisargjhaveri
1个回答

2
我有一个解决方法。我扩展了应用程序类,并在那里全局设置字体,以解决此问题。
对于备用字体,我阅读了Android API中的Typeface代码,并从中找到了一些隐藏的API。通过各种黑客手段(反射、获取私有/隐藏类或方法、设置私有字段等),我最终使其适用于Android API版本21到23。不确定新的API是否适用,而且旧版本不起作用。
您可以在这里检查我的代码。
它可以工作,但我甚至不建议使用它!
更好的解决方案可能是在向用户显示文本时,每次检测每个字符的最佳字体,然后使用TypefaceSpans。我没有尝试过这个方法。
另外,我只是过去两个月一直在玩Android,所以在采纳我的建议之前请三思!:P

你知道在当前TypeFace字体中不可用的字形所使用的字体是什么吗?当Android仍然显示一个字形,即使在当前选择的TypeFace字体中缺少该字形时,我也遇到了类似的问题。 - rraallvv
如果我没记错的话,Android 在 /system/etc/fonts.xml 或类似位置定义了一组备选字体。当高优先级字体中找不到字形时,它会尝试从这些字体中查找。 - nisargjhaveri
我知道了,谢谢。我也在 源代码 中找到它们了。 - rraallvv

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接