过期主题 该主题因在两个月内没有任何回复而自动关闭。
如果您还对该主题感兴趣或者想参与对此主题的讨论,请您重新发表一篇相关的新主题。
主题工具  
feimummy
feimummy 的头像
寧靜之雨殿下
级别:5 | 在线时长:160小时 | 升级还需:50小时级别:5 | 在线时长:160小时 | 升级还需:50小时级别:5 | 在线时长:160小时 | 升级还需:50小时级别:5 | 在线时长:160小时 | 升级还需:50小时级别:5 | 在线时长:160小时 | 升级还需:50小时
注册日期: 2010-12
帖子: 645
致谢: 731
这篇文章是我首发在自己微信公众号的,鉴于很多人刚接触安卓不久,不太会折腾字体的小伙伴比较多,周末整理了这篇扫盲文章。

大家有兴趣的可以访问下原文,关注一下我的公众号

——————
初识配置文件
Android 4.4及之前字体配置文件:fallback_fonts.xml
Android 5.0-6.0的配置文件:fonts.xml 和 fallback_fonts.xml
Android 7.0之后的配置文件:fonts.xml

这些配置文件都在system/etc路径下,安卓5.0-6.0是一个过渡阶段,同时有2个配置文件。

安卓5.0-6.0的Google的代码备注里写着,旧文件fallback_fonts.xml是用来兼容没对高版本安卓做特殊适配的app的,到了安卓7.0就才抛弃了旧配置文件。

也就是说,安卓5.0-6.0上,凡是新配置文件中无法定义到的字体,都会用旧的配置文件去显示,保险起见,我们增删改安卓5.0-6.0配置文件时,需要两个一起改。安卓7.0之后就不需要改2个了。

注意,有些定制设备,还存在 /vendor/etc/fallback_fonts.xml ,这个文件的优先级是高于系统默认的配置文件的,这也是google的代码注释里提及的规则。简而言之,如果你无论怎么替换总会有些字符改不到,那可能是定制的配置文件优先调用了另一个字体里的字符。我手里没这种设备,所以没深入研究,如果你遇到了,请自行变通。

旧配置 fallback_fonts.xml基本上只有字体家族的调用列表,几乎没啥扩展空间;
而新版本fonts.xml则精确到了字重,可发挥空间更大,也是我们换字体的重大依仗。

如果你是安卓4.4及以下的系统,直接把得到的字体改成DroidsansFallback.ttf,替换到手机里好了,没啥好改配置文件的了。

如果你是安卓5.0以上的安卓系统,往下看,把你的手机字体显示能力发挥到最大。


解读配置文件
百度一下【Notepad++】,这款电脑软件是比较专业的看文本的工具,尤其是看安卓字体配置文件,会很方便,如果你直接用普通的txt编辑器改,是容易出问题的。



我们先打开 fallback_fonts.xml,不同的手机可能会有差异,原生安卓6.0的是这样的:

不要看到代码就望而却步,这是很简单的,其实就是从上到下规定了四个字体,分别是简体中文、繁体中文、日文、韩文,如果前面那个文件没有这个字符,系统就用后面那个字体来补上。

然后你就会发现,好像除了改改字体的文件名,似乎啥也改不了的啊,对,你说的没错……所以前面我才说,如果你是安卓4.4及以下的,直接替换系统文件就拉倒了,因为玩不下去了啊。

但是,你需要知道,类似miui主题字体、substratum主题字体、CM主题字体这些,覆盖不到字体的地方,你改配置文件里指向的字体文件,是可以搞定的。

因为这个配置明确告诉了你,在安卓5.0-6.0的手机上,使用旧配置兼容模式执行的字体,文件名叫什么,这样就有了方向,你是要改配置文件里的字体文件名,还是要替换系统字体,都可以做到了。



再来看fonts.xml,这个就厉害多了,毕竟在安卓5.0之后才出现,我们通过改这个来换字体,简直有如神助啊。
同样是简体中文、繁体中文、日文、韩文四个字体的调用规则,但我们可以看到多了2个参数。

一个是weight,一个是style。weight就是字重,也就是字体粗细的程度;style是字体风格,一般来说是常规的和斜体的两种。

我们完全可以自己来定义不同weight和不同style调用不同的字体文件,来达到苹果手机那样粗细分明的效果,甚至更甚一筹,连斜体都能特别定义。

举个例子,你可以设置粗体用雅黑,常规用宋体,斜体用楷体,这就累死很多书籍和报纸的排版效果了。



修改配置文件
前面说到了fonts.xml的强大扩展能力,那么我们应该怎么去扩展呢?
安卓其实给我们做好了范例,也就是默认英文字体的配置写法:

有了前面的基础,这段代码就很容易解读了,一共是100、300、400、500、700、900这6个不同粗细字重,又区分normal、italic两种风格(正常风格和斜体风格)。

我们完全可以照着这个来仿写。

其中 400 weight对应的是正常粗细,700 weight对应的最常用的粗体,300 weight对应的是最常用的细体。

一款中文替换字体,如果包含上面3个字重,排版效果就已经差强人意(这个成语是勉强让人满意的意思,不管咋样就是满意的意思,很多小说的文盲作者当作不满意来用,简直有辱斯文啊)了。

比如这么写:

细体NotoSansSC-Light.otf、常规体NotoSansSC-Regular.otf、斜体Kaiti.ttf、粗体NotoSansSC-Bold.otf都指定好了文件,再把对应文件名的同名字体文件丢到system/fonts下,重启手机就OK了。

不过,一般中文不需要自己去定义斜体,系统会在需要斜体中文的地方自己渲染成斜体的,毕竟基本上没有这种官方斜体中文字体,自己去改一个就没必要了。

以我写的信黑体配置文件为例:
一共2个大段,分别是简体中文和繁体中文,为了省事,我调用的文件都是一样的。然后把信黑的4个字体文件丢到system/fonts下重启手机就生效。

原文下面还有韩文和日文的配置,咱们不用改,就用系统原来的文件即可,所以说,如果你是严格按照配置文件来换的字体,那么字体文件里有没有韩文日文并不是很必要。


安卓7.0的配置文件
再看一眼安卓7.0的fonts.xml汉字区的配置,更高级一些。

会发现多了index这么个玩意儿,实际上是和安卓7.0使用ttc字体有关的。一个ttc字体是有多个ttf文件组合而成,配置文件的index是告诉系统,不同语言去调取ttc内部的哪个文件的。

所以大家会在我的字体里发现NotoSansCJK-Regular.ttc这个玩意儿,其实这个换不换影响不大的,但是有些app比较顽固,比如多看阅读,默认的看书字体就是用这个字体文件,按理说他应该读取中文环境下正确的字体,但奇葩的是如果你动了中文部分的字体配置,多看阅读会调用日文下的汉字……

并且NotoSansCJK-Regular.ttc在日文环境下的日系汉字是有问题的,比如“复”、“关”都是只有半个汉字的宽度。

所以我重新打的NotoSansCJK-Regular.ttc里,日文环境和中文环境对应的index其实是一样的,避免部分顽固app出现问题。

再来一段安卓7.0上,我信黑字体的中文部分完整配置,很简单,只要你看明白了,在自己手机上就能轻松仿写出来。

配置上面插入了自己定义的汉字调用规则,后面仍然保留系统自己的调用规则。
这样的话,系统会从上到下去识别,妥妥的就把字体替换好了,并且粗细分明。

顺便提一下,我解包看过HTC 10国际版的安卓7.0的ROM,他的官方信黑粗细2个字重,也是和我这个改法完全一样的。

同样,小米的的官方小米兰亭、锤子的官方冬青黑,都是用这种方法改的字体。

教程到此就结束了。
只要你看明白了,完整全局替换系统字体就完全不是问题;
只要你学透彻了,安卓手机字体粗细分明就太轻松搞定了;
只要你会举一反三,什么小米魅族三星以及各种杂七杂八的手机,用我分享的字体花一分钟改改,就适配到自己手机上了。

你要做的,仅仅是把原机字体配置文件取出来,照着我的配置抄一遍而已。

为啥不能直接用我的替换?
你见过抄作业把别人名字都抄到作业本上去的吗……不同手机是有差异的。
我是用原生安卓来做的。

世界上那么多安卓手机,我不可能全买过来给你适配一遍(你买来送我,这倒是可以考虑),你必须学会自己动手,学会后也就一分钟改好的事情。

如果还是不想学习,那么想办法自己做字体apk包吧。

再补充一点,使用re管理器等工具替换系统字体文件的时候,可能会造成系统界面崩溃一次自动重启(系统检测到正在使用的文件被修改了,就错乱了),这时候打开一些app会闪退,需要手工重启一次手机,以后就完美了。

最后分享个小窍门
微信和QQ的网页内置浏览器存在以下问题:
1、字体渲染,并没有严格遵照fonts.xml实现多字重挂载,替换多字重后会自动变成恶心的伪粗体

2、网页加载效率,一些外卖红包领取页面走微信登录校验,经常第一遍会卡死,第二遍才正常访问

这些都是QQ浏览器内核搞的鬼。
如果想解决以上问题,安卓5.0+只要切换浏览器的内核为安卓默认的chrome内核就行。

在QQ浏览器内核的微信/qq里访问debugtbs.qq.com,清除TBS内核,再强制启用系统内核,查看内核版本是0就表示切换成功。
表獨立兮山之上,雲容容兮而在下。杳冥冥兮羌晝晦,東風飄兮神靈雨。
我的微信公众号:宁静之雨
回复时引用此帖
以下 7 位极客对 feimummy 此帖表示感谢:
biuankheinom (2017-02-28), BLUE_YWC (2017-02-28), Ruboking (2017-03-19), sjp060305 (2017-02-28), wyslmt (2017-02-28), yimingtx (2017-03-02), 二月兰 (2017-03-31)
liliwyl
极客I
级别:1 | 在线时长:23小时 | 升级还需:7小时
注册日期: 2011-08
帖子: 35
致谢: 1
2017-02-27, 20:04:47 #2 | TOP
怎么清除tbs内核啊?没看到有这选项啊?楼主请恕我愚昧
回复时引用此帖
feimummy
feimummy 的头像
寧靜之雨殿下
级别:5 | 在线时长:160小时 | 升级还需:50小时级别:5 | 在线时长:160小时 | 升级还需:50小时级别:5 | 在线时长:160小时 | 升级还需:50小时级别:5 | 在线时长:160小时 | 升级还需:50小时级别:5 | 在线时长:160小时 | 升级还需:50小时
注册日期: 2010-12
帖子: 645
致谢: 731
2017-02-28, 09:36:15 #3 | TOP
debugtbs.qq.com这个页面加载成功了么,是调试QQ浏览器内核的
表獨立兮山之上,雲容容兮而在下。杳冥冥兮羌晝晦,東風飄兮神靈雨。
我的微信公众号:宁静之雨
回复时引用此帖
以下极客对 feimummy 此帖表示感谢:
biuankheinom (2017-02-28)
BLUE_YWC 帅哥
BLUE_YWC 的头像
极客II
级别:3 | 在线时长:89小时 | 升级还需:11小时级别:3 | 在线时长:89小时 | 升级还需:11小时级别:3 | 在线时长:89小时 | 升级还需:11小时
注册日期: 2015-12
帖子: 77
致谢: 21
2017-02-28, 11:20:13 #4 | TOP
很棒的教程!
回复时引用此帖
yimingtx
极客II
级别:3 | 在线时长:92小时 | 升级还需:8小时级别:3 | 在线时长:92小时 | 升级还需:8小时级别:3 | 在线时长:92小时 | 升级还需:8小时
注册日期: 2014-07
来自: 江苏省无锡市
帖子: 174
致谢: 6
2017-03-02, 22:51:24 #5 | TOP
感谢楼主分享实用教程!
回复时引用此帖
yingchun
极客II
级别:2 | 在线时长:53小时 | 升级还需:7小时级别:2 | 在线时长:53小时 | 升级还需:7小时
注册日期: 2011-09
帖子: 104
致谢: 17
2017-03-21, 10:58:38 #6 | TOP
MIUI8蛋疼,没法粗体细体,按system_fonts.xml替换也不行
回复时引用此帖
feimummy
feimummy 的头像
寧靜之雨殿下
级别:5 | 在线时长:160小时 | 升级还需:50小时级别:5 | 在线时长:160小时 | 升级还需:50小时级别:5 | 在线时长:160小时 | 升级还需:50小时级别:5 | 在线时长:160小时 | 升级还需:50小时级别:5 | 在线时长:160小时 | 升级还需:50小时
注册日期: 2010-12
帖子: 645
致谢: 731
2017-03-22, 14:45:50 #7 | TOP
你把小米兰亭中文和相应的miui英文代码注掉再看看
表獨立兮山之上,雲容容兮而在下。杳冥冥兮羌晝晦,東風飄兮神靈雨。
我的微信公众号:宁静之雨
回复时引用此帖
ytx21cn 帅哥
ytx21cn 的头像
极客I
级别:2 | 在线时长:39小时 | 升级还需:21小时级别:2 | 在线时长:39小时 | 升级还需:21小时
注册日期: 2013-11
来自: 广州
帖子: 39
致谢: 6
2017-06-28, 00:06:51 #8 | TOP
围观一下。
回复时引用此帖
过期主题 该主题因在两个月内没有任何回复而自动关闭。
如果您还对该主题感兴趣或者想参与对此主题的讨论,请您重新发表一篇相关的新主题。
主题工具
发帖规则
不可以发表新主题
不可以发表回复
不可以上传附件
不可以编辑自己的帖子

启用 BB 代码
论坛启用 表情符号
论坛启用 [IMG] 代码
论坛禁用 HTML 代码

论坛跳转:
Copyright ©2003-2014, THEMEX.NET [湘ICP备14009485号]
Powered by vBulletin® v3.8.3 ©Jelsoft Enterprises Ltd.
所有时间均为北京时间。现在的时间是 05:21:48