11
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Androidでデフォルトのフォントを設定したい

Last updated at Posted at 2018-02-12

概要

デフォルトフォントを適応するときのアプローチのまとめと、自作のライブラリの紹介です。

DroidKaigiの資料で触れていますが、Qiitaにまとめておきます。
https://speakerdeck.com/takahirom/support-libraryfalsedownloadable-fontsyaemojicompatnidui-ying-sitaapuriwozuo-rou

デフォルトフォントの適応方法について

以下5つぐらいの方法が存在します。

手動で指定する方法

デフォルトのフォントを指定せずに手動で指定していく方法です。これでほとんど問題ないです。ただToolbarのタイトルやBottomNavigation、TabLayoutなどを自分でちゃんと属性を調べて、大きさなども調べ、自分で指定していく必要があります、ただ頑張って指定していけばなんとかなります。

DroidKaigi公式アプリではマテリアルデザインのDense scriptの記載に則って、指定していっています。
image.png

<TextView
    android:id="@+id/speaker_name"
    android:textAppearance="@style/TextAppearance.App.Body1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"

(DroidKaigiアプリより)

<style name=“TextAppearance.App.Title"
       parent="TextAppearance.AppCompat.Title">
    <item name="android:textSize">21sp</item>
    <item name="android:fontFamily">@font/notosans_medium</item>
</style>

<style name="TextAppearance.App.Subhead" 
       parent="TextAppearance.AppCompat.Subhead">
    <item name="android:textSize">17sp</item>
    <item name="android:fontFamily">@font/notosans_regular</item>
</style>

テーマによる方法

TextViewだけであればtextViewStyleを使ったり、以下のように全てのtextAppearanceを指定していくことで、大体設定することが出来ます。しかし、デフォルトの大きさの指定を調べたりする手間や、テーマファイルは汚れますし、なかなか保守が大変になります。

<style name=“AppTheme" parent="Theme.AppCompat.Light">
   <item name=“android:textAppearance">@style/TextAppearance.hogehoge</item>
   <item name=“android:textAppearanceSmall”>@style/TextAppearance..</item>
   <item name="android:textAppearanceButton">@style/TextAppearance…</item>
   <item name=“android:textAppearanceMediumInverse”>@style/TextAppearance…</item>
。。。。

リフレクションによる方法 StackOverFlow

これはAppCompatThemeでは動きません。一般的なアプリでは利用できないものとなります。

chrisjenx/Calligraphyによる方法

デフォルトフォントを指定したい場合、今のデファクトスタンダードなライブラリはchrisjenx/Calligraphyだと思われます。

去年、Font Resource、Downloadable Fontの発表されました。その時にCalligraphy is deadと作者が言っていて、CalligraphyはFont Resourceの仕組みが適応できず、またツイート前の5/16日が最終コミットで開発が止まっています
image.png

takahirom/DownloadableCalligraphyによる方法

そこで自分がライブラリを作りました。
CalligraphyをベースにFont Resourceの仕組みを適応したのがこのライブラリになります。
これはDroidKaigiアプリの初期に導入して利用しており、うまく動いています。
DownloadableCalligraphyという名前ですが、Font Resourceを指定できるので、アプリにフォントを埋め込むBundled Resourceも普通に指定できます。
みなさんがスターしていただけると、前例が増えて、安心して使えるようになるのではと思います。

CalligraphyConfig.initDefault(new CalligraphyConfig.Builder()
  .setDefaultFont(R.font.roboto_regular)
  .build());
@Override
protected void attachBaseContext(Context newBase) {
    super.attachBaseContext(CalligraphyContextWrapper.wrap(newBase));
}

まとめ

他に選択肢があれば教えてください。なければtakahirom/DownloadableCalligraphyスターをつけてください

11
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?