Android:.ttf > 3MB 时出现字体渲染问题
我的 Android 应用程序需要支持多种语言(如中文等)。其中大部分位于 Ascender 的 DroidSansFallback.ttf 文件中。
请参阅 https://android.googlesource.com/platform/frameworks /base/+/master/data/fonts
在某些 Android 手机上,有 DroidSansFallback.ttf,但缺少许多字形,例如在美国发行的 NexusOne 上。根本没有亚洲字体字形,大部分只有拉丁文和相关字符。
那么该怎么办呢?
我将自己的 DroidSansFallback.ttf 副本添加到“资产”中(我还尝试了其他来源的其他字体),并在运行时使用 Typeface 类对其进行设置。
对于某些手机和某些 .ttf 文件,字体渲染完全搞砸了,这意味着字母只是一行中的一些点。
经过更深入的分析,问题归结为:
- 小 .ttf 文件似乎总是可以工作 (<200kB)
- 大 .ttf 文件根本不起作用 (>3MB)
- 如果手机安装了完整的 DroidSansFallback.ttf(其中约为 3.5MB),即使是 1 或 2MB 的字体也会出错。如果手机仅安装了 DroidSansDallback.ttf 的“lite”版本(约 1MB),则 3MB 字体就可以正常工作。
这里出了什么问题?我错过了什么吗?看起来所有安装/使用的字体加在一起不能大于 somehwat ~4MB。
有人遇到过同样的问题吗?我在 NexusOne (2.1)、HTC Hero(2.1)、SonyEricson Xperia (1.6) 和 Motorola MileStone(2.0) 上尝试过,都显示出相同的行为。
感谢您的任何提示。
My Android Application needs support for various languages (like Chinese etc.). Most of them are in the DroidSansFallback.ttf file from Ascender.
See https://android.googlesource.com/platform/frameworks/base/+/master/data/fonts
On some Android Phones, there is DroidSansFallback.ttf, but with many glyphs missing, e.g. on the NexusOne that is distributed in the USA. There are no Asian Fonts Glyphs at all, mostly only Latin and related characters.
So what to do?
I added to the "assets" my own copy of DroidSansFallback.ttf (I also tried other fonts from other sources) and set it during runtime using the Typeface Class.
With some phones and some .ttf files, the font rendering gets completely screwed up, means the letters are just some dots in one line.
After deeper analysis, the problem boils down to:
- Small .ttf files seem to always work (<200kB)
- Large .ttf files don't work at all (>3MB)
- If the phone has the full DroidSansFallback.ttf installed (which is ~3.5MB), even an 1 or 2MB font screws up. If the phone has only a "lite" Version of DroidSansDallback.ttf installed (which is ~1MB), a 3MB font works fine.
Whats wrong here? Am I missing something? It looks like all installed/used Fonts together cannot be larger than somehwat ~4MB.
Anyone has experienced the same problem? I tried it on NexusOne (2.1), HTC Hero(2.1), SonyEricson Xperia (1.6) and Motorola MileStone(2.0), all show the same behaviour.
Thanks for any hints.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您的设备内存不足。
您列出的所有设备都相当旧。这些堆的大小约为 12MB。
如果可能的话,请考虑使用已预渲染中文文本的 PNG。
You are running out of memory on your devices.
All the devices that you listed are quite old. The heap size is around 12MB on those.
Consider using PNGs with chinese text already pre-rendered, if possible.