Light な weight な日本語フォントを android に投入
Background
昨今は細い (light)フォントが流行っていて、 android アプリの一部にも細いフォントを指定しているのがある。
一方で、日本語フォントは android デフォルトでは「モトヤLマルベリ3 (MotoyaLMaru W3)」である。 丸ゴシック体な上に細いフォントは提供していない。 「游ゴシック」みたいに light/medium/bold の 3 ウェイト提供してくれればいいのだが、 そういうことなく “W3” のみの提供である。
よって最近のアプリで細い英字フォントに通常の太さの日本語フォントが混ざって表示されるという現象が見られる。
これに関して、android の標準フォントとして Noto Sans JP を投入することを紹介する。(注:要 root)
Fallback
/system/etc/fallback_fonts.xml
というのがあって、ここでフォント指定の「フォールバック」をすることになっている。
ここには、下記のように NotoSansJP-Regular.otf
というのが書かれているため、
Noto Sans JP が使われるように見える。
が、標準で入っていた /system/fonts/NotoSansJP-Regular.otf
は、特殊な文字が入っているだけの168kB程度のファイルであった。
なので、この記述よりも後ろの下記の内容が有効となるので日本語は特に断りがなければ、
/system/fonts/MTLmr3m.ttf
(モトヤLマルベリ3) で表示されるのである。
よって、NotoSansJP-*.otf
として日本語フォントを送り込み、
fallback_fonts.xml
で追加した方のフォントにフォールバックするように設定すれば良い。
Recipe
要 root 。
/system/fonts
を編集するので再マウントをするか、
暗黙的に再マウントをしてくれるような CM File Manager などを使用する必要がある。
(説明が煩雑化するので再マウントの方法はここには書かない。)
NotoSansJP-*.otf
を取得する。 例えば、github:watiko/fonts-notosansjp からNotoSansJP-{Light,Regular,Bold,Black}.otf
を取得する。/system/fonts/
に上記ファイルを入れる。パーミッションは owner=root(0), group=root(0) で -rw-r--r-- にすること。 このとき既存の/system/fonts/NotoSansJP-Regular.otf
は上書きしてしまって良い。-
/system/etc/fallback_fonts.xml
に上記で追加したフォントへの fallback を記述し、既存の日本語フォントへの fallback を削除する。 例えば、下記のようにする。 -
/system/etc/fonts.xml
に上記で追加したフォントの内容を登録する。 ここで weight なども設定することとなる。 例えば、下記を追加する。 - 最後に再起動をする。
Recipe (using TWRM Zip)
TWRM などの ZIP インストールの場合は下記のような感じで:
- japanese-NotoSans-install.zip
- META-INF/
- com/
- google/
- android/
- update-binary
- updates-script
- android/
- google/
- com/
- system/
- etc/
- fallback_fonts.xml
- fonts.xml
- fonts/
- NotoSansJP-Black.otf
- NotoSansJP-Bold.otf
- NotoSansJP-Regular.otf
- NotoSansJP-Light.otf
- etc/
- META-INF/
updates-script:
ui_print("=== Japanese-NotoSans-install ===");
ui_print("Mounting file system...");
run_program("/sbin/mount", "/system");
ui_print("Installing...");
package_extract_dir("system", "/system");
set_perm(0, 0, 0644, "/system/etc/fonts.xml");
set_perm(0, 0, 0644, "/system/etc/fallback_fonts.xml");
set_perm(0, 0, 0644, "/system/fonts/NotoSansJP-Black.otf");
set_perm(0, 0, 0644, "/system/fonts/NotoSansJP-Bold.otf");
set_perm(0, 0, 0644, "/system/fonts/NotoSansJP-Regular.otf");
set_perm(0, 0, 0644, "/system/fonts/NotoSansJP-Light.otf");
ui_print("Unmounting...");
run_program("/sbin/umount", "/system");
ui_print("all done!");
(追記) github に hammerhead (Nexus 4 2013) 用のを入れておいた。cat-in-136/NotoSansJP-hammerhead
Result
うまく行けば下記のように、細い英字フォントにマッチした和文フォントが表示されるはずだ。
そしてそして、この無駄に font-weight: 300
を設定している
このページについても細い英字フォントにマッチした和文フォントが表示されるはずだ。