使用可下載字型

試用 Compose
Jetpack Compose 是 Android 推薦的 UI 工具包。瞭解如何在 Compose 中使用文字。

透過可下載的字型功能,可讓 API 向供應商應用程式 (而非 將檔案整合到應用程式中,或允許應用程式下載字型。可下載字型: 透過 AndroidX Core Library 執行 Android API 14 以上版本的裝置。

可下載字型的優點如下:

  • 縮減應用程式大小,進而提高應用程式安裝成功率。
  • 改善整體系統健康狀態,因為多個應用程式可透過 。這樣可以節省使用者的行動數據、手機記憶體和磁碟空間。在這個模型中 必要時,系統會透過網路擷取字型。
,瞭解如何調查及移除這項存取權。 如需實際使用可下載字型的經驗,請參閱 可下載的字型 範例應用程式。

可下載字型功能如何運作?

字型提供者應用程式可以擷取字型並在本機快取,讓其他應用程式可以 要求及分享字型下圖說明這項程序。

顯示表情符號相容性程序中主要元件的圖片
圖 1:可下載字型程序。

基本概念

您可以參考下列方式使用「可下載字型」功能: 將介紹

搭配 Android Studio 和 Google Play 服務使用可下載字型

您可以將應用程式設為使用 Android Studio 3.0 以上版本下載字型。協助你 要開始使用可下載字型功能 可以使用 Google Play 的字型供應程式 免費 Google Cloud 服務

  1. 版面配置編輯器中,選取 TextView。接著,在「屬性」下方 選擇「fontFamily」>「fontFamily」。更多字型
    顯示 Android Studio 版面配置編輯器的圖片
    圖 2.使用版面配置編輯器
    ,瞭解如何調查及移除這項存取權。
    系統會隨即顯示「Resources」(資源) 視窗。
  2. 在「來源」選單中,選取「Google 字型」
  3. 在「字型」方塊中的「可下載內容」下方選取字型
  4. 選取「Create download font」,然後按一下「OK」
    圖片:說明如何從「Resources」視窗中選取字型
    圖 3.從「Resources」視窗中選取字型。
  5. Android Studio 會自動產生轉譯字型所需的相關 XML 檔案 才能在應用程式中正確顯示

    顯示如何預覽字型的圖片
    圖 4.預覽字型檔案。

透過程式輔助方式使用可下載字型

自 Android 8.0 (API 級別 26) 起,AndroidX Core 全面支援可下載字型。適用對象 如要進一步瞭解如何使用 AndroidX Core 程式庫,請參閱 本頁的「可下載的字型 AndroidX 核心資料庫」一節

如要透過程式輔助方式使用可下載字型功能,請與以下兩個主要類別互動:

應用程式使用 FontsContract API 從字型供應程式擷取字型。每項 供應器對其支援的 Android 版本和查詢語言有專屬的一組限制。適用對象 如要進一步瞭解 Android 版本和查詢格式,請參閱供應商的 說明文件。

如要下載字型,請完成下列步驟:

  1. 建立 android.graphics.fonts.FontRequest 類別的執行個體以要求 從供應器提供字型如要建立要求,請傳遞下列參數:
    • 字型提供者的授權。
    • 用於驗證供應者身分的字型提供者套件。
    • 字型的字串查詢。如要進一步瞭解查詢格式,請查看字型 供應商的說明文件 Google Fonts
    • 憑證的雜湊組合,用於驗證提供者的身分。

    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);
    
  2. 建立 FontsContract.FontRequestCallback 類別
  3. 覆寫 onTypefaceRetrieved() 方法,表示字型要求已完成。提供擷取的字型做為參數。 您可以使用這個方法,視需要設定字型。舉例來說,您可以將字型設為 TextView
  4. 覆寫 onTypefaceRequestFailed() 方法來接收字型要求程序中錯誤的相關資訊。如要進一步瞭解 如要瞭解錯誤代碼,請參閱 錯誤代碼常數
  5. 呼叫 FontsContract.requestFont() 方法,從字型中擷取字型 。此方法會啟動檢查,以判斷快取中是否存在該字型。如果 該字型不適用於本機,它會呼叫字型提供者、擷取字型 然後將結果傳遞至回呼。傳送下列參數:
    • Context 門課程
    • android.graphics.fonts.FontRequest 類別的執行個體
    • 用於接收字型要求結果的回呼
    • 用於擷取執行緒字型的處理常式

下列程式碼範例說明整體可下載字型的程序:

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 套件包含要實作的 FontsContractCompatFontRequest 類別 回溯相容的可下載字型功能支援AndroidX 類別包含方法 ,而且下載字型的程序和 中所述的內容 透過程式輔助方式使用可下載字型

如要使用 AndroidX 下載字型,請匯入 FontsContractCompatandroidx.core.provider 套件中的 FontRequest 類別。創作 這些類別的例項 「FontsContract」和 android.graphics.fonts.FontRequest 架構類別。

新增 AndroidX Core 依附元件

如要使用 FontsContractCompatFontRequest 類別,您必須修改 開發環境中應用程式專案的 classpath 依附元件。

如要將 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)

在資訊清單中預先宣告字型

版面配置加載和資源擷取是同步工作。根據預設,系統會首次嘗試 擷取字型會觸發對字型提供者提出的要求,因此會增加第一個版面配置 讓應用程式從可以最快做出回應的位置 回應使用者要求如要避免延遲,您可以預先宣告必須在資訊清單中擷取的字型。 系統從供應器擷取字型後,即可立即使用。如果字型 擷取時間超出預期,系統會取消擷取程序並使用預設值 ,

如要在資訊清單中預先宣告字型,請完成下列步驟:

  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 程式庫,請宣告 以及字型供應程式簽署的憑證系統會使用憑證 字型提供者的身分

請執行下列步驟新增憑證:

  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"
    

Compose 中的可下載字型

距離開始還有 Compose 1.2-alpha07、 您可以在 Compose 應用程式中使用可下載字型 API 進行下載 Google Fonts 會以非同步方式顯示字型,並在應用程式中使用。適用對象 如需更多資訊,請參閱 Compose 可下載字型說明文件。