我已经找了很多天了。
我公司的安卓设备(我们制造)使用的是安卓2.1。我们需要为我们的一位客户支持阿拉伯语。我们能够让第三方软件正确加入阿拉伯语并从另一个第三方购买字体以在 2.1 中显示阿拉伯语。
Android 2.1 有一个名为 fonts.xml 的文件,它指定何时使用字体,包括备用字体。
我想知道代码中的哪个组件读取 fonts.xml 文件(当前位于 /frameworks/base/data/fonts),以便我可以将此文件更改到另一个位置并为每个客户动态更改它,而无需重建新的每次系统的图像。
谢谢!
更新:
搜索 fonts.xml 我发现 sdk.atree 包含以下几行:
# fonts for layoutlib.
frameworks/base/data/fonts/fonts.xml platforms/${PLATFORM_NAME}/data/fonts/fonts.xml
frameworks/base/data/fonts/DroidSans.ttf platforms/${PLATFORM_NAME}/data/fonts/DroidSans.ttf
frameworks/base/data/fonts/DroidSans-Bold.ttf platforms/${PLATFORM_NAME}/data/fonts/DroidSans-Bold.ttf
frameworks/base/data/fonts/DroidSansMono.ttf platforms/${PLATFORM_NAME}/data/fonts/DroidSansMono.ttf
frameworks/base/data/fonts/DroidSerif-Bold.ttf platforms/${PLATFORM_NAME}/data/fonts/DroidSerif-Bold.ttf
frameworks/base/data/fonts/DroidSerif-BoldItalic.ttf platforms/${PLATFORM_NAME}/data/fonts/DroidSerif-BoldItalic.ttf
frameworks/base/data/fonts/DroidSerif-Italic.ttf platforms/${PLATFORM_NAME}/data/fonts/DroidSerif-Italic.ttf
frameworks/base/data/fonts/DroidSerif-Regular.ttf platforms/${PLATFORM_NAME}/data/fonts/DroidSerif-Regular.ttf
frameworks/base/data/fonts/DroidSansFallback.ttf platforms/${PLATFORM_NAME}/data/fonts/DroidSansFallback.ttf
frameworks/base/data/fonts/DroidSansJapanese.ttf platforms/${PLATFORM_NAME}/data/fonts/DroidSansJapanese.ttf
但是,我在 /system/fonts/ 中没有看到文件 fonts.xm 和 DroidSansJapanese.ttf
我建议我的工作将阿拉伯字体重命名为 DroidSansJapanese.ttf 以便系统读取它,但这肯定会在未来引起混乱。
我还尝试手动将修改后的 fonts.xml 放入 /sytem/fonts 并重新启动设备,但没有奏效。
此外,FontLoader.java 加载 fonts.xml,但它没有指定整个路径,因为它通过 Bridge.java 传递。Bridge.java 也通过了完整路径。使用的变量是 String fontOsLocation。它在两个类中都是这样命名的,所以我进行了搜索,但没有找到指定源中的确切位置:
public static FontLoader create(String fontOsLocation) {}
我的最后一个选择是尝试重新编写 FontLoader,因此即使它需要一个字符串作为 fontOsLocation,我也只是给它一个来自 SD 卡的硬编码路径。但我不知道这可能会对系统产生什么影响。谢谢你。