ダウンロード可能なフォントを使用する

Compose を試す
Jetpack Compose は、Android に推奨される UI ツールキットです。Compose でテキストを使用する方法について学習します。
<ph type="x-smartling-placeholder"></ph> ダウンロード可能なフォント →
<ph type="x-smartling-placeholder">

ダウンロード可能フォント機能を使用すると、API は、 アプリにファイルをバンドルしたり、フォントのダウンロードをアプリに許可したりできます。ダウンロード可能なフォントは AndroidX Core ライブラリを介して Android API バージョン 14 以降を搭載したデバイス

ダウンロード可能フォントには次のようなメリットがあります。

  • アプリのサイズが小さくなるため、アプリのインストール成功率が向上します。
  • 複数のアプリで同じフォントを共有できるので、 接続します。これにより、ユーザーのモバイルデータ、スマートフォンのメモリ、ディスク容量を節約できます。このモデルでは、 必要に応じてネットワーク経由で取得されます。
で確認できます。 ダウンロード可能なフォントの実践的な経験については、 DownloadableFonts サンプルアプリです。

ダウンロード可能なフォントの仕組み

フォント プロバイダとは、フォントを取得してローカルにキャッシュし、他のアプリが フォントのリクエストや共有を行えます。次の図は、このプロセスを示しています。

絵文字互換プロセスの主要コンポーネントを示す画像
図 1. ダウンロード可能フォントのプロセス。

基本情報

[ダウンロード可能フォント] 機能を使用する方法は次のとおりです。 説明します。

Android Studio や Google Play 開発者サービスでダウンロード可能なフォントを使用する

Android Studio 3.0 以降を使用すると、アプリでフォントをダウンロードするように設定できます。Google の ダウンロード可能なフォント機能を使用するには、Google Play のフォント プロバイダを使用してください 提供します。

<ph type="x-smartling-placeholder">
  1. Layout EditorTextView を選択します。[属性] で、 [fontFamily]>その他のフォント。 <ph type="x-smartling-placeholder">
    </ph> Android Studio Layout Editor を示す画像 <ph type="x-smartling-placeholder">
    </ph> 図 2.Layout Editor を使用する。
    で確認できます。
    [Resources] ウィンドウが表示されます。
  2. [ソース] メニューで [Google Fonts] を選択します。
  3. [フォント] ボックスで、[ダウンロード可能] の下のフォントを選択します。エリアです。
  4. [Create downloadable font] を選択して [OK] をクリックします。 <ph type="x-smartling-placeholder">
    </ph> [Resources] ウィンドウからフォントを選択する方法を示す画像 <ph type="x-smartling-placeholder">
    </ph> 図 3.[Resources] ウィンドウからのフォントの選択。
  5. Android Studio が、フォントのレンダリングに必要な関連する XML ファイルを自動的に生成する 正しく実装する必要があります

    <ph type="x-smartling-placeholder">
    </ph> フォントのプレビュー方法を示す画像 <ph type="x-smartling-placeholder">
    </ph> 図 4.フォント ファイルをプレビューする。

プログラムでダウンロード可能フォントを使用する

Android 8.0(API レベル 26)以降、AndroidX Core はダウンロード可能フォントを完全にサポートしています。対象 AndroidX Core ライブラリの使用方法については、 このページのダウンロード可能フォントの AndroidX Core ライブラリのセクション

「ダウンロード可能フォント」機能をプログラムで使用するには、次の 2 つの主要なクラスを操作します。

アプリは、FontsContract API を使用してフォント プロバイダからフォントを取得します。各 プロバイダがサポートする Android のバージョンとクエリ言語に関して、独自の制限があります。対象 Android のバージョンとクエリ形式について詳しくは、プロバイダの ご覧ください

フォントをダウンロードする手順は次のとおりです。

  1. android.graphics.fonts.FontRequest クラスのインスタンスを作成して、 。リクエストを作成するには、次のパラメータを渡します。 <ph type="x-smartling-placeholder">
      </ph>
    • フォント プロバイダ オーソリティ。
    • プロバイダの ID を確認するためのフォント プロバイダ パッケージ
    • フォントの文字列クエリ。クエリ形式の詳細については、フォント リソースを プロバイダのドキュメントなど、 Google Fonts
    • プロバイダの ID を確認するための証明書のハッシュセットのリスト。 <ph type="x-smartling-placeholder">

    Kotlin

    val request = FontRequest(
            "com.example.fontprovider.authority",
            "com.example.fontprovider",
            "my font",
            certs
    )
    

    Java

    FontRequest request = new FontRequest("com.example.fontprovider",
                       "com.example.fontprovider", "my font", certs);
    
    <ph type="x-smartling-placeholder">
  2. 新しい Pod を作成する FontsContract.FontRequestCallback クラスです。
  3. onTypefaceRetrieved() メソッドをオーバーライドして、フォント リクエストが完了したことを示します。取得したフォントをパラメータとして指定します。 このメソッドを使用して、必要に応じてフォントを設定できます。たとえば、 TextView
  4. オーバーライドする onTypefaceRequestFailed() メソッドを使用して、フォント リクエスト プロセスのエラーに関する情報を受け取ります。詳細情報 詳細は、このモジュールのコースリソースに記載の エラーコード定数
  5. FontsContract.requestFont() メソッドを呼び出して、フォントからフォントを取得する 接続します。このメソッドは、フォントがキャッシュに存在するかどうかを判断するためのチェックを開始します。条件 フォントをローカルで使用できない場合、フォント プロバイダを呼び出してフォントを取得し、 結果をコールバックに渡します。次のパラメータを渡します。 <ph type="x-smartling-placeholder">
      </ph>
    • アプリケーションの Context クラス
    • android.graphics.fonts.FontRequest クラスのインスタンス
    • フォント リクエストの結果を受け取るコールバック
    • スレッド上のフォントを取得するハンドラ
    • <ph type="x-smartling-placeholder">

次のサンプルコードは、ダウンロード可能なフォントのプロセス全体を示しています。

Kotlin

val request = FontRequest(
        "com.example.fontprovider.authority",
        "com.example.fontprovider",
        "my font",
        certs
)
val callback = object : FontsContract.FontRequestCallback() {

    override fun onTypefaceRetrieved(typeface: Typeface) {
        // Your code to use the font goes here.
        ...
    }

    override fun onTypefaceRequestFailed(reason: Int) {
        // Your code to deal with the failure goes here.
        ...
    }
}
FontsContract.requestFonts(context, request, handler, null, callback)

Java

FontRequest request = new FontRequest("com.example.fontprovider.authority",
        "com.example.fontprovider", "my font", certs);
FontsContract.FontRequestCallback callback =
    new FontsContract.FontRequestCallback() {
        @Override
        public void onTypefaceRetrieved(Typeface typeface) {
            // Your code to use the font goes here.
            ...
        }

        @Override
        public void onTypefaceRequestFailed(int reason) {
            // Your code to deal with the failure goes here.
            ...
        }
};
FontsContract.requestFonts(context, request, handler, null, callback);

フォント プロバイダからフォントをダウンロードする方法について詳しくは、 ダウンロード可能なフォント サンプルアプリです。

AndroidX Core でダウンロード可能フォントを使用する

AndroidX Core は、Android 搭載デバイスで「ダウンロード可能フォント」機能をサポートする API バージョン 14 以降。「 androidx.core.provider パッケージには、実装する FontsContractCompat クラスと FontRequest クラスが含まれます。 下位互換性のあるダウンロード可能フォント機能のサポートも追加されました。AndroidX クラスには、以下のメソッドが含まれます。 フレームワークのメソッドとほぼ同じです。フォントをダウンロードするプロセスは、 (このページのこのセクションで プログラムからダウンロード可能なフォントを使用するをご覧ください。

AndroidX を使用してフォントをダウンロードするには、FontsContractCompatandroidx.core.provider パッケージの FontRequest クラス。作成 これらのクラスのインスタンスを FontsContractandroid.graphics.fonts.FontRequest フレームワーク クラス。

<ph type="x-smartling-placeholder">

AndroidX Core の依存関係を追加する

FontsContractCompat クラスと FontRequest クラスを使用するには、次のように変更する必要があります。 アプリ プロジェクトのクラスパス依存関係を開発環境内で修正する必要があります。

AndroidX Core をアプリ プロジェクトに追加するには、アプリのプロジェクトに次の依存関係を追加します。 build.gradle ファイル:

Groovy

dependencies {
    ...
    implementation "androidx.core:core-ktx:2.2.0"
}

Kotlin

dependencies {
    ...
    implementation("androidx.core:core-ktx:2.2.0")
}

ダウンロード可能なフォントを XML のリソースとして使用する

Android 8.0(API レベル 26)と AndroidX Core では、 XML レイアウトのリソースとしてカスタム フォントを使用する。つまり、フォントを 作成します。テーマ全体にカスタム フォントを定義すると、 太字、中、薄など複数の太さとスタイルを指定できます。

  1. res/font フォルダに新しい XML ファイルを作成します。
  2. <font-family> ルート要素を追加し、フォント関連の属性を次のように設定します。 次のサンプル XML ファイルに示します。
  3. <?xml version="1.0" encoding="utf-8"?>
    <font-family xmlns:android="http://schemas.android.com/apk/res/android"
            android:fontProviderAuthority="com.example.fontprovider.authority"
            android:fontProviderPackage="com.example.fontprovider"
            android:fontProviderQuery="example font"
            android:fontProviderCerts="@array/certs">
    </font-family>
    
  4. レイアウト XML ファイルで @font/font_file_name としてファイルを参照します。また、 使用 getFont() メソッドを使用して、ファイルをプログラムから取得できます。たとえば、 getFont(R.font.font_file_name)

マニフェストでフォントを事前に宣言する

レイアウトのインフレーションとリソースの取得は同期タスクです。デフォルトでは、最初の試行は フォントを取得すると、フォント プロバイダへのリクエストがトリガーされ、 あります。この遅延を回避するには、取得する必要があるフォントをマニフェストで事前に宣言します。 フォントがプロバイダから取得されると、すぐに使用できるようになります。if フォント 取得に時間がかかる場合、システムは取得プロセスを中止し、デフォルトの あります。

マニフェストでフォントを事前に宣言する手順は次のとおりです。

  1. res/values/arrays.xml にリソース配列を作成し、使用するフォントを宣言する 選択します。
  2. res/values/arrays.xml
    <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <array name="preloaded_fonts">
            <item>@font/font1</item>
            <item>@font/font2</item>
        </array>
    </resources>
    
  3. meta-data タグを使用して、マニフェストでリソース配列を宣言します。
  4. <meta-data android:name="preloaded_fonts" android:resource="@array/preloaded_fonts" />
    

証明書を追加

フォント プロバイダがプリインストールされていない場合、または AndroidX Core ライブラリを使用している場合は、 フォント プロバイダの署名に使用されている証明書。システムは証明書を使用して、 フォント プロバイダの ID を指定します。

<ph type="x-smartling-placeholder">

証明書を追加するには、次の手順に従います。

  1. 証明書の詳細を含む文字列配列を作成します。証明書の詳細については、 詳しくは、フォント プロバイダのドキュメントをご覧ください。
  2. <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <string-array name="certs">
           <item>MIIEqDCCA5CgAwIBAgIJA071MA0GCSqGSIb3DQEBBAUAMIGUMQsww...</item>
        </string-array>
    </resources>
    
  3. fontProviderCerts 属性を配列に設定します。
  4. android:fontProviderCerts="@array/certs"
    
    <ph type="x-smartling-placeholder">

Compose のダウンロード可能なフォント

開始まであと Compose 1.2-alpha07 Compose アプリで Downloadable Fonts API を使用して、 Google Fonts を非同期で使用して、アプリで使用できるようにします。対象 詳細については、 Compose のダウンロード可能フォントのドキュメントをご覧ください。