［Android］Calligraphyで色々なフォントを表示する

## はじめに

[Calligraphy](https://github.com/InflationX/Calligraphy)というライブラリを使って自分でダウンロードしたフォントを表示します。
本記事では次のようにフォントを表示するアプリを作成して動作を確認していきます。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/79387/7be3b2e3-bd2b-f356-c0c7-add3ed85e998.png" width=25%>

## 1. プロジェクトにライブラリを追加する
次の手順でCalligraphyをセットアップします。

(1) build.gralde(app)に次の内容を追記する。

```groovy|build.gradle(.app)
dependencies {
    implementation 'io.github.inflationx:calligraphy3:3.1.1'
    implementation 'io.github.inflationx:viewpump:2.0.3'
}
```

(2) 「Gradle file have changed slice last project sync」と表示されるので「Sync Now」をクリックする。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/79387/c178bcc2-6876-37d8-23da-7f94212ea2ac.png)

## 2. 利用するフォント(ttfファイル)をダウンロードする。
[Google Font](https://fonts.google.com/)にアクセスし、次の手順でフォントファイルをダウンロードします。


(1) 表示されているフォントを選択する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/79387/70152f35-5421-2f1b-b551-8c5e407ed3cd.png)


(2) ⬇️を押して、ダウンロードする。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/79387/a49e1b0e-5c11-81c3-af96-e74ff171eb1a.png)

## 3. プロジェクトにフォント(ttfファイル)を追加する
次の手順でプロジェクトにフォント(ttfファイル)を追加します。

(1) 「File」→「New」→「Folder」→「Assets Folder」でAssetsフォルダを作成する。 
(2)  「assets右クリック」→「New」→「Directory」でfontsフォルダを作成する。
(3)  fontsフォルダにフォント（ttfファイル）を格納する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/79387/78a482ee-9bad-f03f-963f-1b0ce4bb6986.png)

## 4. TextViewにフォント(ttfファイル)を指定する

次の内容をTextViewに**fontPath="fonts/Cinzel-Regular.ttf"**の行を追加します。

```xml|activity_main.xml
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!"
        fontPath="fonts/Cinzel-Regular.ttf"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
```

## 5. アプリケーションでフォントをインストールする

次の内容をMainActivity.ktにフォントをインストールする処理を追加します。
                    
```kotlin|MainActivity.kt
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        ViewPump.init(
            ViewPump.builder()
                .addInterceptor(
                    CalligraphyInterceptor(
                        CalligraphyConfig.Builder().build()
                    )
                )
                .build()
        )

        setContentView(R.layout.activity_main)
    }

    override fun attachBaseContext(newBase: Context) {
        super.attachBaseContext(ViewPumpContextWrapper.wrap(newBase))
    }
```

次の内容を記述すればデフォルトフォントとして使えるようになるようです。
しかし今回はTextViewのみ反映させたいので特に設定しません。

```kotlin|MainActivity.kt
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        ViewPump.init(
            ViewPump.builder()
                .addInterceptor(
                    CalligraphyInterceptor(
                        CalligraphyConfig.Builder()
                            .setDefaultFontPath("fonts/Cinzel-Regular.ttf") // Add Line
                            .setFontAttrId(R.attr.fontPath)                 // Add Line
                            .build()
                    )
                )
                .build()
        )

        setContentView(R.layout.activity_main)
    }
```

## おわりに

#### Calligraphyで気をつけること、できること
- フォントを利用するにはassets->fontsフォルダにフォント(ttfファイル)を格納する必要がある
- フォントを利用するにはTextViewのfontPathに利用するフォント名称を記述する必要がある
- フォントを利用するにはActivityにフォントを読み込む処理を記述する必要がある。
- ダウンロードしたフォントをデフォルトフォントとして利用することもできる。

#### Calligraphyを使ったサンプル

次にCalligraphyを使ったサンプルを公開しています。
何か不明点などあれば次のサンプルをご覧ください。

| ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/79387/d9d7624c-b17e-c312-ceb1-afaa99e309b8.png) | [Kaleidot725 => android-mylab => CalligraphySample](https://github.com/kaleidot725/android-mylab/tree/master/CalligraphySample) |
| ------- | ------- |