关于 Android 默认字体以及对比微软雅黑字体

 用了一段时间 Android 手机之后,不禁对系统中的字体产生了兴趣。因为看起来,Android 中使用的中文字体和 Windows 中使用的“微软雅黑”很像,我一度怀疑 Android 中使用的就是这个字体。今天有时间,就一探究竟吧。

由于 Android 是基于 Linux 的操作系统,因此根据 Linux 上的经验,在手机上使用“ES文件浏览器”浏览到文件系统的 /system/fonts 文件夹,就可以看到系统中安装的字体。为了方便观察,我把它们复制到电脑上了:

关于 Android 默认字体以及对比微软雅黑字体

wbpluto的手机中一共有9个字体文件:1个为时钟显示准备的Clockopia,4种样式的无衬线(Sans Serif)字体,4种样式的衬线(Serif)字体。关于衬线和无衬线,各位可以上网搜索一下相关的介绍了解。

这9个字体文件中,Droid Sans Fallback 体积明显较大,达到4.2MB,而其他的只有一百多KB。原来,其他字体只包含了西方文字字符,因为西方文字都是拼音文字,只需要少量字符就可以拼成各种单词,而中日韩等东亚文字基于“型”而不是基于“声”,因此字符成千上万,非常多。在计算机系统中,为西方文字准备的字体都非常小,不包含东亚字符,为了解决在使用西方字体时无法显示东亚文字的问题,就采用了目前这种方式:将一种字体与另一种(或多种)字体链接,遇到第一种字体无法显示的字符,自动调用链接的字体来显示。

例如在 Android 系统中,Droid Sans 是默认字体,只包含西方字符,应用程序默认情况下都会调用它;而 Droid Sans Fallback 包含了东亚字符。当需要显示的字符在 Droid Sans 字体中不存在(如汉字),即没有对应编码的字符时,系统会到 Droid Sans Fallback 中去寻找相应编码的字符,如果找到,则使用 Droid Sans Fallback 字体来显示它,如果仍然找不到该编码对应的字符,则系统无法在屏幕上显示出这个字符。

各种操作系统中都有这样的运行机制,例如在英文版的 Windows 7 系统或英文版的应用软件中,界面默认采用的是在开发 Vista 时专门为屏幕显示而全新设计的 Segoe UI 字体,其中并不包含中文字符,但当系统需要显示中文字符时,会自动去调用对应的“微软雅黑”字体来显示(如下图)。当然,这一链接关系是保存在 Windows 注册表中的,我们可以通过修改注册表来改变它。

关于 Android 默认字体以及对比微软雅黑字体

下面,通过一幅图来对比一下 Droid Sans Fallback 和 微软雅黑这两个长得非常像的字体:

关于 Android 默认字体以及对比微软雅黑字体

  • 雅黑字体显得更宽。但根据整行汉字来看,雅黑单个字符的宽度并没有更宽,只是减少了边缘的空白,使字间距变小,相邻两个字的笔画几乎要挨在一起了。
  • 雅黑字体笔画分布均匀,如“地”字,四条竖线之间的间隔一致。
  • 雅黑字体布局更合理,如“图”字里面的“冬”看起来重心很稳,而 Droid Sans Fallback 中的“冬”有点要倒的感觉。
  • 由于宽度和笔画布局上的不同,造成雅黑字体看起来更丰满(肥),更紧实。
  • 这两种字体都是非等宽字体,可以看出雅黑的英文字母和数字普遍更宽(中文由于是方块字,宽度没有区别)。
  • 雅黑在可能的情况下笔画更长,例如“号”字下方的勾,这样在小字号时可读性更好。
  • 小字号情况下,雅黑字体仍然显得大一些,并且由于笔画的间距控制得较好,更容易看清楚每个字,相比之下,Droid Sans Fallback 笔画黏在一起的情况稍微严重一些(如“最”字)。
  • 仔细观察一下,小字号时的雅黑字底部并没有完全对齐,而 Droid Sans Fallback 对得很整齐。因此雅黑在小字号时有点大小不一,这也是其广为诟病的一点。

需要说明的是,虽然字体文件中指定了字符的笔画,但字符的渲染效果仍然和系统环境有关系,上图是使用 Photoshop 制作的,和手机上的显示效果不完全相同。尽管如此,由于处在同一个渲染环境下,我们仍然可以对比出两种字体的区别和各自的特点。

目前,网上已经有人在制作使用微软雅黑字体的 Android 手机 ROM。我个人认为,这两种字体已经非常相似,都具备了现代字体的特点,以上列出的差异都是细节上的,对于屏幕阅读来说并不是那么重要。因此使用这两种字体当中的哪一种可以根据爱好选择,你有权更喜欢前者,也有权更喜欢后者,智能手机机玩的就是*和定制性,只要用起来顺心,得到满足和方便就行。

如果各位有更多见解,欢迎评论交流。


本文转自wbpluto 51CTO博客,原文链接:http://blog.51cto.com/wbpluto/476716,如需转载请自行联系原作者

上一篇:SpringBoot如何实现Solr? | 带你读《SpringBoot实战教程》之三十八


下一篇:前端需要了解云原生吗