スクリーンショット_2019-05-22_22

拼音付きフォントをAndroidに適用する。

ある日偶然こんなツイートを見つけました。拼音がついているフォントとの邂逅でした。

初めて拼音があるフォントがあることを初めて知りました。これは中国語の勉強にも役立つのでは?

現在、私は中国語を勉強中です。例えば分からない単語があったときに辞書や翻訳アプリにコピペして拼音や意味を調べるのですが、英語はスペースがあるので一意に単語を選択できるのですが、日本語や中国語は単語を一意に選択できません。なので一回一回選択しなければなりません。これが意外とストレス。また、分からない単語があると全く音読ができません。これもストレス。このフォントはとても便利なのでは。。

適用例

こんな感じで Android に適用できました。日本語もちゃんと表示できています。Androidのバージョンは8.0.1 root化済み Nexus 6Pです。

適応手順

1.拼音付きフォントの選定

  • この Aa拜拜生僻字 というフォントが柔らかいゴシックみたいな感じで可愛い。そして、繁体字・簡体字の両方に対応しています。


2.フォントを日本語対応させる

日本語は新字体という日本独自で簡略化された漢字があります。例えば以下のような「訳」「読」「変」は、 Aa拜拜生僻字 に含まれていないので違うフォントが適応されてしまいます。これは最初のツイートで起きていた現象と同じです。これは精神衛生的に良くありません。日本語も表示できるようにしたいです。

3.フォントを合成する

 Aa拜拜生僻字 に似ているフォントとして、あずきフォント v1.21 を選定しました。

フォント を合成するためのツールとして FontForge を使います。

FontForge インストール方法(on Mac)

#GUI で使うために必要
$ brew cask install xquartz
#fontforgeのインストール
$ brew install fontforge
#GUI 版のインストール
$ brew cask install fontforge

合成スクリプト
以下のスクリプトを build.pe として保存します。Aa拜拜生僻字 の名前は aabaibaishengpizi.ttf ,あずきフォント v1.21は azuki.ttf であることを確認します。

#!/usr/local/bin/fontforge -script
# パラメータ
baibai  = "aabaibaishengpizi.ttf"
azuki   = "azuki.ttf"
azuki_s = "azuki_small.ttf"

# 漢字を aabaibaishengpizi の大きさに合わせる
Open(azuki)
# 範囲選択(ひらがな・カタカナ、漢字)
Select(0u4E00, 0uFF9F, 0u3041, 0u30FE)
# 文字の太さを考えると、これくらいが丁度いい
Scale(80,75)
Move(0, -110)
Generate(azuki_s)
Close()
# 足りないフォントをあずきフォントから補完する
Open(baibai)
# 英字、ギリシャ文字、ひらがな・カタカナ
Select(0u0020, 0u007E, 0u0390, 0u03CE, 0u0401, 0u0451, 0u3041, 0u30FE)
# 選択中のすべてのグリフを消去します。
Clear()
# 合成する(空のグリフだけマージされる)
MergeFonts(azuki_s)
SetFontNames(family, family, family, "Regular")
# 生成
Generate(baibai:r + "-marge.ttf")
Close()

以下のコマンドをします。aabaibaishengpizi-marge.ttf が生成されます。

$ fontforge -script build.pe


4.Androidにフォントを適応させる

Aa拜拜生僻字 を英字フォントに設定するとなぜか一部文字が豆腐になりました。そのため、英字フォントは別のものを設定する必要があります。
Mali が無料で書体の感じも近く、スタイルが多いので良いです。
しかし、このままではロック画面上のコロンが表示されないので、以下の記事に基づいてfontforgeで編集する必要があります。

フォントの適応方法は以下の記事を参考にしてください。
合成したaabaibaishengpizi.ttf  ,Mali フォントを /system/fonts/ に入れてパーミッション変えて、/system/etc/fonts.xml を編集します。


中国語・日本語の設定

<family lang="zh-Hans">
   <font weight="400" style="normal" index="2">aabaibaishengpizi.ttf</font>
</family>
<!-- TODO: Add Bopo -->
<family lang="zh-Hant">
   <font weight="400" style="normal" index="3">aabaibaishengpizi.ttf</font>
</family>
<family lang="ja">
   <font weight="400" style="normal" index="0">aabaibaishengpizi.ttf</font>
</family>
<family lang="ko">
   <font weight="400" style="normal" index="1">NotoSansCJK-Regular.ttc</font>
</family>


web サイトとか基本的な英数字テキスト

<family name="sans-serif">
       <font weight="100" style="normal">Mali-ExtraLight.ttf</font>
       <font weight="100" style="italic">Mali-ExtraLightItalic.ttf</font>
       <font weight="300" style="normal">Mali-Light.ttf</font>
       <font weight="300" style="italic">Mali-LightItalic.ttf</font>
       <font weight="400" style="normal">Mali-Regular.ttf</font>
       <font weight="400" style="italic">Mali-Italic.ttf</font>
       <font weight="500" style="normal">Mali-Medium.ttf</font>
       <font weight="500" style="italic">Mali-MediumItalic.ttf</font>
       <font weight="900" style="normal">Mali-SemiBold.ttf</font>
       <font weight="900" style="italic">Mali-SemiBoldItalic.ttf</font>
       <font weight="700" style="normal">Mali-Bold.ttf</font>
       <font weight="700" style="italic">Mali-BoldItalic.ttf</font>
   </family>


ランチャー上 のアプリ名とかステータスバー上のWIFI名等

<family name="sans-serif-condensed">
       <font weight="300" style="normal">Mali-Light.ttf</font>
       <font weight="300" style="italic">Mali-LightItalic.ttf</font>
       <font weight="400" style="normal">Mali-Regular.ttf</font>
       <font weight="400" style="italic">Mali-Italic.ttf</font>
       <font weight="500" style="normal">Mali-Medium.ttf</font>
       <font weight="500" style="italic">Mali-MediumItalic.ttf</font>
       <font weight="700" style="normal">Mali-Bold.ttf</font>
       <font weight="700" style="italic">Mali-BoldItalic.ttf</font>
   </family>

この記事が気に入ったらサポートをしてみませんか?