91精品国产手机在线-白筒袜嫩萝双腿之间乳白液体-青青操手机在线视频观看-日本中文字幕人妻日韩-日韩精品在线观看视频网站-天堂资源中文最新版在线一区-欧美专区一区二区三区-国产综合亚洲欧美在线-国产精品久久久久久福利69堂

安卓手機改變字體教程 安卓原生字體與手機默認(rèn)字體


安卓手機改變字體教程 安卓原生字體與手機默認(rèn)字體

文章插圖
一篇就夠了,只要你讀透了,再加上我分享的字體,就能舉一反三,在任意一臺能root的安卓手機上完美全替換字體,并且實現(xiàn)多粗細(xì)調(diào)用 。
上面這個安卓小機器人圖,和平常的小綠人有點不同哦,大家有沒有覺得像這個……周冬雨的凝視^0^
安卓手機改變字體教程 安卓原生字體與手機默認(rèn)字體

文章插圖
1.初識配置文件
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個了 。
注意,有些定制設(shè)備,還存在 /vendor/etc/fallback_fonts.xml ,這個文件的優(yōu)先級是高于系統(tǒng)默認(rèn)的配置文件的,這也是google的代碼注釋里提及的規(guī)則 。簡而言之,如果你無論怎么替換總會有些字符改不到,那可能是定制的配置文件優(yōu)先調(diào)用了另一個字體里的字符 。我手里沒這種設(shè)備,所以沒深入研究,如果你遇到了,請自行變通 。
舊配置 fallback_fonts.xml基本上只有字體家族的調(diào)用列表,幾乎沒啥擴展空間;
而新版本fonts.xml則精確到了字重,可發(fā)揮空間更大,也是我們換字體的重大依仗 。
如果你是安卓4.4及以下的系統(tǒng),直接把得到的字體改成DroidsansFallback.ttf,替換到手機里好了,沒啥好改配置文件的了 。
如果你是安卓5.0以上的安卓系統(tǒng),往下看,把你的手機字體顯示能力發(fā)揮到最大 。
2.解讀配置文件
百度一下【Notepad++】,這款電腦軟件是比較專業(yè)的看文本的工具,尤其是看安卓字體配置文件,會很方便,如果你直接用普通的txt編輯器改,是容易出問題的 。
安卓手機改變字體教程 安卓原生字體與手機默認(rèn)字體

文章插圖
我們先打開 fallback_fonts.xml,不同的手機可能會有差異,原生安卓6.0的是這樣的:
<family>
<fileset>
【安卓手機改變字體教程 安卓原生字體與手機默認(rèn)字體】<file>NotoSansSC-Regular.otf</file>
</fileset>
</family>
<family>
<fileset>
<file>NotoSansTC-Regular.otf</file>
</fileset>
</family>
<family>
<fileset>
<file>NotoSansJP-Regular.otf</file>
</fileset>
</family>
<family>
<fileset>
<file>NotoSansKR-Regular.otf</file>
</fileset>
</family>
不要看到代碼就望而卻步,這是很簡單的,其實就是從上到下規(guī)定了四個字體,分別是簡體中文、繁體中文、日文、韓文,如果前面那個文件沒有這個字符,系統(tǒng)就用后面那個字體來補上 。
然后你就會發(fā)現(xiàn),好像除了改改字體的文件名,似乎啥也改不了的啊,對,你說的沒錯……所以前面我才說,如果你是安卓4.4及以下的,直接替換系統(tǒng)文件就拉倒了,因為玩不下去了啊 。
但是,你需要知道,類似miui主題字體、substratum主題字體、CM主題字體這些,覆蓋不到字體的地方,你改配置文件里指向的字體文件,是可以搞定的 。
因為這個配置明確告訴了你,在安卓5.0-6.0的手機上,使用舊配置兼容模式執(zhí)行的字體,文件名叫什么,這樣就有了方向,你是要改配置文件里的字體文件名,還是要替換系統(tǒng)字體,都可以做到了 。
安卓手機改變字體教程 安卓原生字體與手機默認(rèn)字體

文章插圖
再來看fonts.xml,這個就厲害多了,畢竟在安卓5.0之后才出現(xiàn),我們通過改這個來換字體,簡直有如神助啊 。
</family>
<family>
<font weight="400" >NotoSansSC-Regular.otf</font>
</family>
<family>
<font weight="400" >NotoSansTC-Regular.otf</font>
</family>
<family>
<font weight="400" >NotoSansJP-Regular.otf</font>
</family>
<family>
<font weight="400" >NotoSansKR-Regular.otf</font>
</family>
同樣是簡體中文、繁體中文、日文、韓文四個字體的調(diào)用規(guī)則,但我們可以看到多了2個參數(shù) 。
一個是weight,一個是style 。weight就是字重,也就是字體粗細(xì)的程度;style是字體風(fēng)格,一般來說是常規(guī)的和斜體的兩種 。
我們完全可以自己來定義不同weight和不同style調(diào)用不同的字體文件,來達到蘋果手機那樣粗細(xì)分明的效果,甚至更甚一籌,連斜體都能特別定義 。
舉個例子,你可以設(shè)置粗體用雅黑,常規(guī)用宋體,斜體用楷體,這就累死很多書籍和報紙的排版效果了 。
3.修改配置文件
前面說到了fonts.xml的強大擴展能力,那么我們應(yīng)該怎么去擴展呢?
安卓其實給我們做好了范例,也就是默認(rèn)英文字體的配置寫法:
<family name="sans-serif">
<font weight="100" >Roboto-Thin.ttf</font>
<font weight="100" >Roboto-ThinItalic.ttf</font>
<font weight="300" >Roboto-Light.ttf</font>
<font weight="300" >Roboto-LightItalic.ttf</font>
<font weight="400" >Roboto-Regular.ttf</font>
<font weight="400" >Roboto-Italic.ttf</font>
<font weight="500" >Roboto-Medium.ttf</font>
<font weight="500" >Roboto-MediumItalic.ttf</font>
<font weight="900" >Roboto-Black.ttf</font>
<font weight="900" >Roboto-BlackItalic.ttf</font>
<font weight="700" >Roboto-Bold.ttf</font>
<font weight="700" >Roboto-BoldItalic.ttf</font>
</family>
有了前面的基礎(chǔ),這段代碼就很容易解讀了,一共是100、300、400、500、700、900這6個不同粗細(xì)字重,又區(qū)分normal、italic兩種風(fēng)格(正常風(fēng)格和斜體風(fēng)格) 。
我們完全可以照著這個來仿寫 。
其中 400 weight對應(yīng)的是正常粗細(xì),700 weight對應(yīng)的最常用的粗體,300 weight對應(yīng)的是最常用的細(xì)體 。
一款中文替換字體,如果包含上面3個字重,排版效果就已經(jīng)差強人意(這個成語是勉強讓人滿意的意思,不管咋樣就是滿意的意思,很多小說的文盲作者當(dāng)作不滿意來用,簡直有辱斯文啊)了 。
比如這么寫:
<family>
<font weight="300" >NotoSansSC-Light.otf</font>
<font weight="400" >NotoSansSC-Regular.otf</font>
<font weight="400" >Kaiti.ttf</font>
<font weight="700" >NotoSansSC-Bold.otf</font>
</family>
細(xì)體NotoSansSC-Light.otf、常規(guī)體NotoSansSC-Regular.otf、斜體Kaiti.ttf、粗體NotoSansSC-Bold.otf都指定好了文件,再把對應(yīng)文件名的同名字體文件丟到system/fonts下,重啟手機就OK了 。
不過,一般中文不需要自己去定義斜體,系統(tǒng)會在需要斜體中文的地方自己渲染成斜體的,畢竟基本上沒有這種官方斜體中文字體,自己去改一個就沒必要了 。
以我寫的信黑體配置文件為例:
<!-- //++[Feature][寧靜之雨][2017/01/13][Font] Chinese font customization -->
<family lang="zh-Hans">
<font weight="300" >NotoSansSC-Light.otf</font>
<font weight="400" >NotoSansSC-Regular.otf</font>
<font weight="500" >NotoSansSC-Medium.otf</font>
<font weight="700" >NotoSansSC-Bold.otf</font>
</family>
<family lang="zh-Hant">
<font weight="300" >NotoSansSC-Light.otf</font>
<font weight="400" >NotoSansSC-Regular.otf</font>
<font weight="500" >NotoSansSC-Medium.otf</font>
<font weight="700" >NotoSansSC-Bold.otf</font>
</family>
<!-- //~~[Feature][寧靜之雨][2017/01/13][Font] Chinese font customization -->
一共2個大段,分別是簡體中文和繁體中文,為了省事,我調(diào)用的文件都是一樣的 。然后把信黑的4個字體文件丟到system/fonts下重啟手機就生效 。
原文下面還有韓文和日文的配置,咱們不用改,就用系統(tǒng)原來的文件即可,所以說,如果你是嚴(yán)格按照配置文件來換的字體,那么字體文件里有沒有韓文日文并不是很必要 。
4.安卓7.0的配置文件
再看一眼安卓7.0的fonts.xml漢字區(qū)的配置,更高級一些 。
<family>
<font weight="400"index="2">NotoSansCJK-Regular.ttc</font>
</family>
<family>
<font weight="400"index="3">NotoSansCJK-Regular.ttc</font>
</family>
<family>
<font weight="400"index="0">NotoSansCJK-Regular.ttc</font>
</family>
<family>
<font weight="400"index="1">NotoSansCJK-Regular.ttc</font>
</family>
會發(fā)現(xiàn)多了index這么個玩意兒,實際上是和安卓7.0使用ttc字體有關(guān)的 。一個ttc字體是有多個ttf文件組合而成,配置文件的index是告訴系統(tǒng),不同語言去調(diào)取ttc內(nèi)部的哪個文件的 。
所以大家會在我的字體里發(fā)現(xiàn)NotoSansCJK-Regular.ttc這個玩意兒,其實這個換不換影響不大的,但是有些app比較頑固,比如多看閱讀,默認(rèn)的看書字體就是用這個字體文件,按理說他應(yīng)該讀取中文環(huán)境下正確的字體,但奇葩的是如果你動了中文部分的字體配置,多看閱讀會調(diào)用日文下的漢字……
并且NotoSansCJK-Regular.ttc在日文環(huán)境下的日系漢字是有問題的,比如“復(fù)”、“關(guān)”都是只有半個漢字的寬度 。
所以我重新打的NotoSansCJK-Regular.ttc里,日文環(huán)境和中文環(huán)境對應(yīng)的index其實是一樣的,避免部分頑固app出現(xiàn)問題 。
再來一段安卓7.0上,我信黑字體的中文部分完整配置,很簡單,只要你看明白了,在自己手機上就能輕松仿寫出來 。
<!-- //++[Feature][寧靜之雨][2017/01/13][Font] Chinese font customization -->
<family lang="zh-Hans">
<font weight="300" >NotoSansSC-Light.otf</font>
<font weight="400" >NotoSansSC-Regular.otf</font>
<font weight="500" >NotoSansSC-Medium.otf</font>
<font weight="700" >NotoSansSC-Bold.otf</font>
</family>
<family lang="zh-Hant">
<font weight="300" >NotoSansSC-Light.otf</font>
<font weight="400" >NotoSansSC-Regular.otf</font>
<font weight="500" >NotoSansSC-Medium.otf</font>
<font weight="700" >NotoSansSC-Bold.otf</font>
</family>
<!-- //~~[Feature][寧靜之雨][2017/01/13][Font] Chinese font customization -->
<family>
<font weight="400"index="2">NotoSansCJK-Regular.ttc</font>
</family>
<family>
<font weight="400"index="3">NotoSansCJK-Regular.ttc</font>
</family>
<family>
<font weight="400"index="0">NotoSansCJK-Regular.ttc</font>
</family>
<family>
<font weight="400"index="1">NotoSansCJK-Regular.ttc</font>
</family>
配置上面插入了自己定義的漢字調(diào)用規(guī)則,后面仍然保留系統(tǒng)自己的調(diào)用規(guī)則 。
這樣的話,系統(tǒng)會從上到下去識別,妥妥的就把字體替換好了,并且粗細(xì)分明 。
順便提一下,我解包看過HTC 10國際版的安卓7.0的ROM,他的官方信黑粗細(xì)2個字重,也是和我這個改法完全一樣的 。
同樣,小米的的官方小米蘭亭、錘子的官方冬青黑,都是用這種方法改的字體 。
教程到此就結(jié)束了 。
只要你看明白了,完整全局替換系統(tǒng)字體就完全不是問題;
只要你學(xué)透徹了,安卓手機字體粗細(xì)分明就太輕松搞定了;
只要你會舉一反三,什么小米魅族三星以及各種雜七雜八的手機,用我分享的字體花一分鐘改改,就適配到自己手機上了 。
你要做的,僅僅是把原機字體配置文件取出來,照著我的配置抄一遍而已 。
為啥不能直接用我的替換?
你見過抄作業(yè)把別人名字都抄到作業(yè)本上去的嗎……不同手機是有差異的 。
我是用原生安卓來做的 。
世界上那么多安卓手機,我不可能全買過來給你適配一遍(你買來送我,這倒是可以考慮),你必須學(xué)會自己動手,學(xué)會后也就一分鐘改好的事情 。
如果還是不想學(xué)習(xí),那么想辦法自己做字體apk包吧 。
再補充一點,使用re管理器等工具替換系統(tǒng)字體文件的時候,可能會造成系統(tǒng)界面崩潰一次自動重啟(系統(tǒng)檢測到正在使用的文件被修改了,就錯亂了),這時候打開一些app會閃退,需要手工重啟一次手機,以后就完美了 。
最后分享個小竅門,微信和QQ的網(wǎng)頁內(nèi)置瀏覽器存在以下問題:
1、字體渲染,并沒有嚴(yán)格遵照fonts.xml實現(xiàn)多字重掛載,替換多字重后會自動變成惡心的偽粗體
2、網(wǎng)頁加載效率,一些外賣紅包領(lǐng)取頁面走微信登錄校驗,經(jīng)常第一遍會卡死,第二遍才正常訪問
這些都是QQ瀏覽器內(nèi)核搞的鬼 。
如果想解決以上問題,安卓5.0+只要切換瀏覽器的內(nèi)核為安卓默認(rèn)的chrome內(nèi)核就行 。
“瀏覽器內(nèi)核”問題解決方案
微信和QQ的內(nèi)置網(wǎng)頁瀏覽器(webview),以及QQ瀏覽器內(nèi)核的各種瀏覽器,存在以下問題:
1、字體渲染,并沒有嚴(yán)格遵照fonts.xml實現(xiàn)多字重掛載,替換多字重后會自動變成惡心的偽粗體
2、網(wǎng)頁加載效率,一些外賣紅包領(lǐng)取頁面走微信登錄校驗,經(jīng)常第一遍會卡死,第二遍才正常訪問
如果想解決以上問題,可以切換到Chrome內(nèi)核 。
訪問 ***/
打開后選擇清除TBS內(nèi)核,再強制啟用系統(tǒng)內(nèi)核,重啟后選擇查看內(nèi)核版本如果顯示0,就已經(jīng)強制切到系統(tǒng)webview內(nèi)核 。

    推薦閱讀