AndroidでRobotoフォントを置換するとロック画面のコロンが豆腐になる原因

この記事の賞味期限は切れています。掲載内容や情報が古い可能性があります。

Androidのテーマ機能やFlashable ZIPなどでRobotoフォントを置換すると、ロック画面のコロンが豆腐 (四角に文字化け) になる原因と、その対策方法をメモしておきます。

ロック画面のコロンは”fancy colon”

Androidのロック画面や常に画面表示 (Ambient Display、Always On Display) には基本的には時計が表示されますが、テーマ機能やMagisk Module、flashable ZIPなどで/systemのRoboto-Regular.ttfを置換すると、コロンが▯のように長方形の文字に化けてしまいます。

実はロック画面の時計では通常のコロンではなく、”fancy colon”と呼ばれる特殊な文字が使用されています。(KeyguardStatusView.javaで置換されており、TalkBack用には通常のコロンに置き換えるような処理がされています)

Roboto-Regular.ttfの”fancy colon” (U+EE01) と通常のコロン (U+003A) を比べると、下の画像のように”fancy colon”のほうが中央寄せになっていることが分かります。

コロンとの比較

“fancy colon”は個人やベンダーが自由に割り当てできる私用領域の文字なので、通常のフォントにはほぼ100%含まれていません。そのため、Roboto-Regular.ttfを置換すると”fancy colon”が表示できず、豆腐になってしまう…というわけです。

ちなみに、Pixel 2 XLのAndroid 8.1.0ではRobotoではなくGoogleSansに置き換わっています。GoogleSansもRoboto同様に”fancy colon”を含んでいるので、RobotoをGoogleSansに変更するのであれば問題は起きません。

フォント編集ソフトでU+EE01を追加すればOK

コロンが豆腐になってしまうのを防ぐには、単純にフォント編集ソフトでU+EE01のグリフを追加すればいいだけです。

Robotoからコピーするか、コロンをコピーして自分で中央寄りに編集してください。

※RobotoのライセンスはApache License 2.0なのでライセンスの宣言さえあれば改変しても問題ありませんが、編集したいフォントのライセンスがどうなっているか確認の上編集してください。

フォント編集ソフトにはFontForgeなどがあります。使い方は検索してください。

FontForgeでの表示
FontForgeでの表示

これでコロンをちゃんと表示しつつ、他のアルファベットなどを別のフォントに置き換えられます。

文字化けせず
文字化けせず

Magisk moduleのKoruri Fontではv03でこの問題を修正しています。

ちなみに…OnePlusのOxygenOS 11ではU+EE01ではなくU+A789が使用されています。余計な手間を増やすとは…。

はてブ Pocket Mastodon タイトルとURLをコピー