読者です 読者をやめる 読者になる 読者になる

どせいたんさき。

ナスダヨー

Android 5.x (Lollipop) で中華フォントから脱出する

f:id:xr0038:20150205195551p:plain

目的

Android の使用言語を非日本語にしておくとたいていの漢字は非日本語圏のフォント (DroidSansFallback?) が優先される.Android の UI の言語は英語にしつつ,日本語の文章はきちんと日本語用のフォントで表示したい場合には結構深い設定をいじる必要がある.

Android 4.x 系でシステムフォントの優先順位を変更するには /system/etc/fallback_fonts.xml というファイルを編集すればよかった.これについては以前エントリを書いた.


Android 5.x 系 (Lollipop) では /system/etc/fallback_fonts.xml というファイルはあるものの,このファイルを変更してもシステムフォントの優先順位は変わらないことがわかった.何とかして Android 5.x 系でもシステムフォントの優先順位を変えたい.

解決方法

/system/etc/ の中に fonts.xml というファイルが増えていることに気づいた.

<?xml version="1.0" encoding="utf-8"?>
<!--
    NOTE: this is the newer (L) version of the system font configuration,
    supporting richer weight selection. Some apps will expect the older
    version, so please keep system_fonts.xml and fallback_fonts.xml in sync
    with any changes, even though framework will only read this file.

    All fonts withohut names are added to the default list. Fonts are chosen
    based on a match: full BCP-47 language tag including script, then just
    language, and finally order (the first font containing the glyph).

    Order of appearance is also the tiebreaker for weight matching. This is
    the reason why the 900 weights of Roboto precede the 700 weights - we
    prefer the former when an 800 weight is requested. Since bold spans
    effectively add 300 to the weight, this ensures that 900 is the bold
    paired with the 500 weight, ensuring adequate contrast.
-->

こんな記事もあったので間違いなくこのファイルを編集すればいいだろう.


こんな感じに編集した.

--- fonts.xml.orig  2015-02-04 13:48:10.774337490 +0900
+++ fonts.xml    2015-02-04 13:50:10.298850358 +0900
@@ -234,13 +234,16 @@
     <family lang="zh-Hant">
         <font weight="400" style="normal">NotoSansHant-Regular.otf</font>
     </family>
-    <family lang="ja">
-        <font weight="400" style="normal">NotoSansJP-Regular.otf</font>
-    </family>
     <family lang="ko">
         <font weight="400" style="normal">NotoSansKR-Regular.otf</font>
     </family>
     <family>
+        <font weight="400" style="normal">NotoSansJP-Regular.otf</font>
+    </family>
+    <family>
+        <font weight="400" style="normal">MTLmr3m.ttf</font>
+    </family>
+    <family>
         <font weight="400" style="normal">NanumGothic.ttf</font>
     </family>
     <family>
@@ -252,7 +255,4 @@
     <family>
         <font weight="400" style="normal">DroidSansFallback.ttf</font>
     </family>
-    <family lang="ja">
-        <font weight="400" style="normal">MTLmr3m.ttf</font>
-    </family>
 </familyset>

重要なのは日本語フォントの lang="ja" を消すこと.MTLmr3m.ttf (モトヤLマルベリ) の設定もついでに変更しているけどたぶん必要ないと思う.結果は以下の通り.ブラウザのアドレスバーやタブの表示に注目していただきたい.「菅直人」の漢字がきちんと表示されていることが確認できる.他にもシステムフォントの設定が有効になる部分*1でも日本語用フォントが使われていることを確認した.

f:id:xr0038:20150205195556p:plain

*1:メールのプレビュー部など