TextView等に独自のフォントを使いたい時があるだろう。
1〜2箇所なら画像で用意するというのも手だが、数え切れないくらい必要であったり、どうしても文字列でないと困る場合もある。
そんなときはTextView(やその他のView)のサブクラスを作るのが手っ取り早い。
以下に、その手順を見ていくことにする。
なお、フォントはこちらのものを使用させていただいた。
Kazesawa フォント: M+ と Source Sans Pro の合成フォント
1〜2箇所なら画像で用意するというのも手だが、数え切れないくらい必要であったり、どうしても文字列でないと困る場合もある。
そんなときはTextView(やその他のView)のサブクラスを作るのが手っ取り早い。
以下に、その手順を見ていくことにする。
なお、フォントはこちらのものを使用させていただいた。
Kazesawa フォント: M+ と Source Sans Pro の合成フォント
カスタムTextViewを作る
1.各コンストラクタでフォントの設定を行う。
その際にisInEditMode()で条件付けを行う。
これをしないとレイアウトエディタ上でエラーが出る。
2.フォントの読み込みを行う。
staticなフィールドを用意して、一度だけ読み込むようにする。
仮にインスタンスが作られるごとに読み込むようにしていたら、メモリも大量に消費するし、表示にすごく時間がかかるようになってしまう。
(特にListViewの中で使用する場合等だ。)
フォントを読み込む
フォントを読み込むにはassetsフォルダに置いたフォントを直接読み込む方法もあるが、assetsフォルダはzipファイル以外は1Mまでという制限があるそうなので、assetsにフォントを圧縮したものを置いておき、内部ストレージに中身を展開することにする。
まずは使用するttfファイルを圧縮してfont.zipというファイルを作り、それをassetsフォルダに置く。

それでは読み込みを行うアクティビティを作成しよう。
1.アクティビティには何らかのViewが必要なので、TextViewを追加する。
なお、この段階ではまだフォントファイルを取り出していないので、通常のTextViewを使う。
2.初期化を行うタスクを実行する。
タスクの詳細は次に述べる。
zipファイルからフォントを取り出す
zipファイルからttfファイルを取り出そう。
先ほど呼び出しを行った初期化のタスクの中で全て行う。
1.ttfファイルの存在を確認し、ない場合のみ展開を行う。
2.assetsフォルダ直下にあるfont.zipを読み込む。
3.zip内にあるすべてのファイルを展開する。
4.Macで圧縮を行うと__MACOSX〜のようなファイルが勝手に同梱されてしまうので、それらは無視する。
5.ファイルの書き出しを行う。
6.次のアクティビティに遷移する。
これで一通りの処理は完了だ。
次のアクティビティに遷移して、そこでカスタムフォントを表示してみよう。
カスタムフォントを表示する。
表示用にxmlを以下のようにしよう。
デフォルトのフォントのTextViewとカスタムフォントのTextViewを一つずつ設定してある。
あとはActivityからこれを読み込むだけだ。
実行するとこのようになる。

カスタムフォントが正常に表示された。
1.各コンストラクタでフォントの設定を行う。
その際にisInEditMode()で条件付けを行う。
これをしないとレイアウトエディタ上でエラーが出る。
2.フォントの読み込みを行う。
staticなフィールドを用意して、一度だけ読み込むようにする。
仮にインスタンスが作られるごとに読み込むようにしていたら、メモリも大量に消費するし、表示にすごく時間がかかるようになってしまう。
(特にListViewの中で使用する場合等だ。)
フォントを読み込む
フォントを読み込むにはassetsフォルダに置いたフォントを直接読み込む方法もあるが、assetsフォルダはzipファイル以外は1Mまでという制限があるそうなので、assetsにフォントを圧縮したものを置いておき、内部ストレージに中身を展開することにする。
まずは使用するttfファイルを圧縮してfont.zipというファイルを作り、それをassetsフォルダに置く。

それでは読み込みを行うアクティビティを作成しよう。
1.アクティビティには何らかのViewが必要なので、TextViewを追加する。
なお、この段階ではまだフォントファイルを取り出していないので、通常のTextViewを使う。
2.初期化を行うタスクを実行する。
タスクの詳細は次に述べる。
zipファイルからフォントを取り出す
zipファイルからttfファイルを取り出そう。
先ほど呼び出しを行った初期化のタスクの中で全て行う。
1.ttfファイルの存在を確認し、ない場合のみ展開を行う。
2.assetsフォルダ直下にあるfont.zipを読み込む。
3.zip内にあるすべてのファイルを展開する。
4.Macで圧縮を行うと__MACOSX〜のようなファイルが勝手に同梱されてしまうので、それらは無視する。
5.ファイルの書き出しを行う。
6.次のアクティビティに遷移する。
これで一通りの処理は完了だ。
次のアクティビティに遷移して、そこでカスタムフォントを表示してみよう。
カスタムフォントを表示する。
表示用にxmlを以下のようにしよう。
デフォルトのフォントのTextViewとカスタムフォントのTextViewを一つずつ設定してある。
あとはActivityからこれを読み込むだけだ。
実行するとこのようになる。

カスタムフォントが正常に表示された。
コメント