xml*_*lmx 6 user-interface fonts android
我正在开发一个需要使用 Roboto 字体来呈现 UI 的 Android 应用程序。
根据https://github.com/google/roboto/releases,Roboto 字体分为三种:
谷歌说:
提示字体
提示是嵌入在字体中的关于如何修改(扭曲)字形以在低分辨率显示器上看起来更好的说明。作为权衡,提示字体比未提示版本占用更多空间。
Roboto 和 Noto 都有暗示和非暗示版本。谷歌建议:
- 在不实现提示的 Android 和 Mac OS X 上使用未提示的版本。
- 在 Chrome 操作系统、Windows 和 Linux 上使用提示字体。
什么之间的区别的Roboto,机器人和的Roboto-unhinted?
nim*_*nim 10
传统屏幕是低分辨率显示器。
事实上,分辨率如此之低,以至于在普通文本大小下,仅缩放字体字形就会出现可怕的像素化。因此,文本渲染系统不只是缩放文本,它们还会扭曲字形形状以使其尽可能匹配像素限制(网格拟合)。
微软历来通过字体提示(智能字体?TTF)实现了这一点:字体文件本身包含有关如何在特定大小下扭曲每个字形形式的说明(代码)。优点是您的文本渲染器不需要非常智能。缺点是只有有人花费大量时间编写提示规则的字体才能在屏幕上显示良好,并且仅在此人所针对的特定像素密度下(这就是为什么微软试图如此长时间地迫使制造商只生产 96 dpi 屏幕的原因) )。
Apple 选择专注于笨字体(postscript 和 children?CFF 字体),并使用智能渲染引擎(对所有字体应用相同的规则)。
字体格式现在在 opentype (TTF + OTF) 中合并,但字体仍然可以在哑模式(文本渲染器控制失真)智能模式(字体提示控制失真)或两者的混合中渲染。
由于 Linux 通过合法性被禁止访问 Windows 字体,但仍然托管了许多为 TTF 字体编写的应用程序,Linux 文本渲染器能够为未提示的 TTF 字体计算即时合成提示。
对于智能手机和 hidpi 屏幕等高分辨率显示器来说,网格拟合无论如何都无关紧要。像素在缩放过程中的舍入误差足够小,像素对齐不匹配可以忽略不计。
因此:
– Android:不需要提示字体,因为它用于高分辨率显示器,并且无论如何都可以自动计算提示,因为它是 Linux 变体
– Apple:从不以 TTF 或提示为导向,现在使用高分辨率显示器
– Windows:通常与低分辨率显示器一起使用,许多应用程序仍然使用旧的哑渲染堆栈,如果没有提示就无法正确网格拟合
– ChromeOS 和 Linux:可以在低分辨率显示器上使用,可以自动计算提示,不一定需要提示字体,但谷歌可能花钱请人手动提示字体,因此它认为内置提示更好(现在的提示过程) : 使用 Linux 引擎自动计算提示,然后手动检查它是否工作正常,在需要时更正,将更正后的计算添加到字体文件中。最好的自动提示会产生干净的形状,但有时扭曲太多意味着已对齐的字形词干是不再对齐,因为算法将一个形状移动到上像素线,将下一个形状移动到下像素线。人类确实更擅长识别和修复这种情况)。
现代字体格式是旧元数据的可怕巴别塔,可以取悦各种软件(通常:Microsoft 使用 A、Apple B、OS/2 C 和 Adobe D,让我们将 ABC 和 D 放在新格式中以便每个人都高兴。除了 ABC和 D 都有自己的缺点,让我们添加对下一代软件更好的 E)。android 版本比 unhinted 版本小一点,谷歌可能从这个版本中剥离了所有 Android 不使用的元数据。只要您只在 Android 上使用它,它就会像未提示的版本一样工作,并且可以节省存储空间。