移动叔叔

标题: 最完美的字体替换教程,没有之一。冲转载,感谢原帖!!!!!!!! [打印本页]

作者: じ☆veヾ_♀    时间: 2016-8-8 10:09
标题: 最完美的字体替换教程,没有之一。冲转载,感谢原帖!!!!!!!!
TTF字体直接替换法

简体中文:
需要替换DroidSansFallback.ttf(Google 在 Android 5.0 为了更好地实现多重字重和样式,推出了 NotoSansHans 字体,要仍然考虑到程序的字体调用的兼容性因此不能删除它这就是保留它的原因)和 NotoSansHans-Regular.otf(有些 ROM 默认没有此字体,如果没有的话也无妨,默认就好。而NotoSansHans-Regular.otf的优先级应该要比DroidSansFallback.ttf 高,所以一般开发平台在 Android 5.0 以上的程序默认是优先调用它的,如果没有,则再调用老的。注:ttf格式和otf通用,但是替换法请务必保持扩展名为.otf格式。即使是ttf的字体,也可以改成otf。另外请记得修改文件权限)。
同理:如果设备使用的是中国台湾、香港等地区的语言。(未实验)繁体中文:需要替换 DroidSansFallback.ttf 和 NotoSansHant-Regular.otf。当然,如果设备使用的是其他国家的语言:日本语言:需要替换 NotoSansJP-Regular.otf 和 MTLmr3m.ttf。韩国语言:需要替换NotoSansKR-Regular.otf和 NanumGothic.ttf。

英文字体:
英文字体是所有国家或地区的设备语言通用的字体。对于在安卓 4.4 的版本确实只需要替换 Roboto-Regular.ttf 就够用了。但是在安卓5.0替换后,可以发现系统 UI 界面程序名称仍然为默认英文字体,因此还需要替换 RobotoCondensed-Regular.ttf 才可以实现。

部分字体名称对应说明:
默认数字英文 Roboto-Regular(常规)/Blod(粗体)/Lighgt(细体)/Italic(斜体)/ItalicLight(斜体细体)Black(黑体)/BoldItalic(黑斜体)。锁屏时间字体 Roboto-Thin/Roboto-ThinItalic和 状态栏时间字体:Roboto-Medium/Roboto-MediumItalic。

字体文件替换技巧:
如果需要将大量字体进行替换,为了防止系统出现异常。可提前先将原字体文件全部备份到SD卡并创建文件夹(提前创建好),然后将下载好的字体全部拷贝到system\文件夹内(任意文件夹名,提前创建好),统一修改好权限,然后直接覆盖到system\fonts内(注意操作完成之后,正在使用的文件管理器可能会出现暂时闪退的问题),重启手机。注:经测试在安卓system\fonts字体库内有些字体文件替换后可能会导致个别应用程序无法打开的情况,考虑到系统的稳定性,个人认为没有必要将其外的字体替换。因为目前这样就已经够用了,再替换,单从系统操作界面上,也无法察觉和大面积替换有什么不同。

关于部分安卓设备替换时钟字体后,锁屏时钟字体仍然没有任何改变的情况:
针对出现的这一问题的原因,广义上上来讲就是安卓系统碎片化的原因。狭义上来讲,可能就是部分手机ROM的定制厂商,设计了只属于自家设备的时钟字体,从而并没有去调用系统内部提供的锁屏时钟字体库,导致的这一情况。解决方法的有:反编译时钟或SystemUI APK手动修改时钟字体相关配置。或使用基于Xposed框架的系统美化软件,优点是不需要经过修改APK就可以修改系统锁屏时钟字体,达到美化系统的目的。

关于字体质量(乱码)的问题:
我们所找的字体包一般只有一个ttf的中文字体文件。那如果寻找不到相同的英文字体怎么办?实际上只要把中文字体拷贝一遍然后再命名为Roboto-Regular.ttf 一般来讲就可以使用了。但是如果中文字体很大的话(10M以上)。如若不想浪费空间。中文字体可以以链接的方式创建一个命名为 Roboto-Regular.ttf 的英文字体,替换也可以解决这一问题。但是,直接这么做的话,将中文字体直接作为英文字体,替换后出现了乱码怎么办?这一般不是字体库不全的因素导致的。经实践,如果单独替换中文字体后没有出现乱码等情况(操作正确,且权限已修改)。而是只替换英文字体后之后才出现的。可以考虑的原因是英文(或原中文)字体太臃肿,或者是英文(或原中文)字体编码跟中文字体编码冲突导致的问题了。当然,这只是一个假设。我的解决方法是:这需要手工修改字体文件,使用字体修改软件如:Font Creator,手动删除多余的中文字体。然后,还可以再适当的再优化一下:删除英文字体库下中文等平台的无用信息等。手工删改庞大的中文字库可能会出现机器卡死的情况。建议在内存充足的环境下进行。具体怎么操作,请自行查阅相关资料,这里就不再赘述。

核心提要(基本字体更换):
中文字体需要替换:DroidSansFallback.ttf(中文字体文件),NotoSansHans-Regular.otf(注:有些 ROM 默认没有此字体,没有但也无妨。)
英文字体需要替换:Roboto-Regular.ttf(英文字体文件)  RobotoCondensed-Regular.ttf(主要DroidSansFallback作用在系统UI界面应用程序英文部分名称)

fonts.xml fallback_fonts.xml 文件修改法

可以参照知乎网友提供的教程(具体需要修改哪些字体最好参照手动替换法):
链接:http://www.zhihu.com/question/26202765

教程如下:

本答案讨论修改简体中文字体。

前提:Root。

第一步,将准备好的字体文件用 Root Explorer 之类的文件管理器复制到 /system/fonts/ 目录,并设置好相应权限。

第二步就是修改Android 系统的字体配置文件,你可以在 Android 之中修改,鉴于文件行数很多,在电脑上修改好再覆盖源文件也是不错的选择。

以前我们只需要修改一个 fallback_fonts.xml 文件即可,而 Android 5.0 为了更好地实现多重字重和样式,使用了新的字体配置文件 fonts.xml,两个文件都在 /etc/ 目录下可以找到,我们需要同时修改两个文件。

旧文件:fallback_fonts.xml

找到其中的这一处:
<family>
   <fileset>
       <filelang="zh-Hans">NotoSansHans-Regular.otf</file>
   </fileset>
</family>
这里记录了系统默认的简体中文字体 NotoSans Hans,是否留着它由你决定,你可以用你自己的字体记录将其替换,或者写在它前面。形式是这样的:
<family>
   <fileset>
       <file>YourFont-Regular.otf</file>
       <file>YourFont-Bold.otf</file>
       <file>YourFont-Italic.otf</file>
       <file>YourFont-ItalicBold.otf</file>
   </fileset>
</family>
其中,lang 属性是可选的,字体文件可以使 otf,也可是是 ttf。一个 family 下最多可以对应四个字体,分别是常规、粗体、斜体、粗斜体。对于中文字体,一般只有常规和粗体两个单独的字体文件,所以一般不需要写后两行。

新文件:fonts.xml

这是 Android 5.0 新引入的配置文件,跟老的文件相比,这个配置文件

这一次,系统首选字体(也就是 Roboto )和各个语言的 fallback 字体都记录在了同一个文件中(之前分了两个文件),而且使用了相似的记录格式,因此,fallback 字体也可以实现多重字重和样式,而不是之前只有常规、粗、斜、粗斜四种。

首先看到其中 Roboto 部分:
<family name="sans-serif">
       <font weight="100"style="normal">Roboto-Thin.ttf</font>
       <font weight="100"style="italic">Roboto-ThinItalic.ttf</font>
       <font weight="300"style="normal">Roboto-Light.ttf</font>
       <font weight="300"style="italic">Roboto-LightItalic.ttf</font>
       <font weight="400" style="normal">Roboto-Regular.ttf</font>
       <font weight="400"style="italic">Roboto-Italic.ttf</font>
       <font weight="500"style="normal">Roboto-Medium.ttf</font>
       <font weight="500"style="italic">Roboto-MediumItalic.ttf</font>
       <font weight="900"style="normal">Roboto-Black.ttf</font>
       <font weight="900"style="italic">Roboto-BlackItalic.ttf</font>
       <font weight="700"style="normal">Roboto-Bold.ttf</font>
       <font weight="700"style="italic">Roboto-BoldItalic.ttf</font>
   </family>
可以看到,只要我们愿意,可以以很细的间隔为每个字重,每个样式对应相应的字体文件。这一段代码是我们模仿的对象。

然后同样找到后面控制简体中文的部分:
<family lang="zh-Hans">
   <font weight="400"style="normal">NotoSansHans-Regular.otf</font>
</family>
Google 虽然很懒地只写了一行,但是我们完全仿照前面的代码任意增加字重——只要你有相应地字体文件,这里就不啰嗦了。

全部修改完成之后(软)重启手机即可。

注意:
我们可以发现 Droid Sans Fallback 仍然在这两个配置文件中,不要修改它,更不要采用替换 DroidSansFallback.ttf 的粗暴方式修改字体。这样有可能会导致你的手机 不能正常显示一些特殊字符。
关于新旧两套配置文件的区别,根据 Google 在文件开头的注释(强烈建议每个人在修改之前都仔细阅读并理解这些注释),在相当多的应用中,使用何种字体都是由旧的配置文件控制,所以建议两者的修改的是同步的(不同应该也是可以的)。根据我的猜测,应用适用哪一套文件跟开发者在代码中如何申明字体极其样式有关,Android 5.0 自带的应用中,基本还在适用旧配置,而部分先于 Android 5.0 发布的应用,却可以适用新的配置。不过,浏览器和 webview 中的字体如何显示,似乎另有规律,我还没有仔细研究。
旧的配置文件中,可以为斜体指定单独的字体文件。但是我将中文的斜体指定为楷体的尝试均以失败而告终。似乎这些字体文件的元数据必须属于同一字体家族才可以。但是在新的配置文件中,这种尝试是可以成功的。下面是成功的效果(小部件为 Jack's Music Widget,字体分别为汉仪旗黑和 Fandol Kai)

如果还有什么不懂的话可以参照本人提供的安卓4.4以下设备的字体详细替换教程链接:http://jingyan.baidu.com/article/37bce2be1a39d41003f3a253.html至于选哪种方法取决于大家,依据个人喜好而论吧。教程结束,祝大家2016元宵快乐!


作者: dk咲败    时间: 2016-8-8 13:09
精品贴,强力冲顶!!
作者: 24511024    时间: 2016-8-8 15:22
提示: 作者被禁止或删除 内容自动屏蔽




欢迎光临 移动叔叔 (http://bbs.ydss.cn/) Powered by Discuz! X3.2