透過可下載的字型功能,可讓 API 向供應商應用程式 (而非 將檔案整合到應用程式中,或允許應用程式下載字型。可下載字型: 透過 AndroidX Core Library 執行 Android API 14 以上版本的裝置。
可下載字型的優點如下:
- 縮減應用程式大小,進而提高應用程式安裝成功率。
- 改善整體系統健康狀態,因為多個應用程式可透過 。這樣可以節省使用者的行動數據、手機記憶體和磁碟空間。在這個模型中 必要時,系統會透過網路擷取字型。
可下載字型功能如何運作?
字型提供者應用程式可以擷取字型並在本機快取,讓其他應用程式可以 要求及分享字型下圖說明這項程序。
基本概念
您可以參考下列方式使用「可下載字型」功能: 將介紹
搭配 Android Studio 和 Google Play 服務使用可下載字型
您可以將應用程式設為使用 Android Studio 3.0 以上版本下載字型。協助你 要開始使用可下載字型功能 可以使用 Google Play 的字型供應程式 免費 Google Cloud 服務
- 在版面配置編輯器中,選取
TextView
。接著,在「屬性」下方 選擇「fontFamily」>「fontFamily」。更多字型。 系統會隨即顯示「Resources」(資源) 視窗。 - 在「來源」選單中,選取「Google 字型」。
- 在「字型」方塊中的「可下載內容」下方選取字型
- 選取「Create download font」,然後按一下「OK」。
Android Studio 會自動產生轉譯字型所需的相關 XML 檔案 才能在應用程式中正確顯示
透過程式輔助方式使用可下載字型
自 Android 8.0 (API 級別 26) 起,AndroidX Core 全面支援可下載字型。適用對象 如要進一步瞭解如何使用 AndroidX Core 程式庫,請參閱 本頁的「可下載的字型 AndroidX 核心資料庫」一節。
如要透過程式輔助方式使用可下載字型功能,請與以下兩個主要類別互動:
android.graphics.fonts.FontRequest
: 此類別可讓您建立字型要求FontsContractCompat
: 以建立新範本Typeface
物件,根據 字型要求。
應用程式使用 FontsContract
API 從字型供應程式擷取字型。每項
供應器對其支援的 Android 版本和查詢語言有專屬的一組限制。適用對象
如要進一步瞭解 Android 版本和查詢格式,請參閱供應商的
說明文件。
如要下載字型,請完成下列步驟:
- 建立
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);
- 建立
FontsContract.FontRequestCallback
類別 - 覆寫
onTypefaceRetrieved()
方法,表示字型要求已完成。提供擷取的字型做為參數。 您可以使用這個方法,視需要設定字型。舉例來說,您可以將字型設為TextView
。 - 覆寫
onTypefaceRequestFailed()
方法來接收字型要求程序中錯誤的相關資訊。如要進一步瞭解 如要瞭解錯誤代碼,請參閱 錯誤代碼常數。 - 呼叫
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
套件包含要實作的 FontsContractCompat
和 FontRequest
類別
回溯相容的可下載字型功能支援AndroidX 類別包含方法
,而且下載字型的程序和
中所述的內容
透過程式輔助方式使用可下載字型。
如要使用 AndroidX 下載字型,請匯入 FontsContractCompat
和
androidx.core.provider
套件中的 FontRequest
類別。創作
這些類別的例項
「FontsContract
」和
android.graphics.fonts.FontRequest
架構類別。
新增 AndroidX Core 依附元件
如要使用 FontsContractCompat
和 FontRequest
類別,您必須修改
開發環境中應用程式專案的 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 版面配置中的資源也就是說,您不需要將字型 資產。您可以為整個主題定義自訂字型, 多種粗細和樣式,例如粗體、中等或淺色 (如有提供)。
- 在
res/font
資料夾中建立新的 XML 檔案。 - 新增
<font-family>
根元素,然後將字型相關屬性設為 如以下 XML 範例檔案所示: - 在版面配置 XML 檔案中,將此檔案稱為
@font/font_file_name
。你也可以 請使用getFont()
方法,以便透過程式擷取檔案,例如getFont(R.font.font_file_name)
。
<?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>
在資訊清單中預先宣告字型
版面配置加載和資源擷取是同步工作。根據預設,系統會首次嘗試 擷取字型會觸發對字型提供者提出的要求,因此會增加第一個版面配置 讓應用程式從可以最快做出回應的位置 回應使用者要求如要避免延遲,您可以預先宣告必須在資訊清單中擷取的字型。 系統從供應器擷取字型後,即可立即使用。如果字型 擷取時間超出預期,系統會取消擷取程序並使用預設值 ,
如要在資訊清單中預先宣告字型,請完成下列步驟:
- 在
res/values/arrays.xml
中建立資源陣列,並宣告 執行預先擷取 - 使用
meta-data
標記在資訊清單中宣告資源陣列。
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>
<meta-data android:name="preloaded_fonts" android:resource="@array/preloaded_fonts" />
新增憑證
如果未預先安裝字型供應程式,或者您使用的是 AndroidX Core 程式庫,請宣告 以及字型供應程式簽署的憑證系統會使用憑證 字型提供者的身分
請執行下列步驟新增憑證:
- 建立一個包含憑證詳細資料的字串陣列。進一步瞭解憑證 請參閱字型提供者的說明文件
- 將
fontProviderCerts
屬性設為陣列。
<?xml version="1.0" encoding="utf-8"?> <resources> <string-array name="certs"> <item>MIIEqDCCA5CgAwIBAgIJA071MA0GCSqGSIb3DQEBBAUAMIGUMQsww...</item> </string-array> </resources>
android:fontProviderCerts="@array/certs"
Compose 中的可下載字型
距離開始還有 Compose 1.2-alpha07、 您可以在 Compose 應用程式中使用可下載字型 API 進行下載 Google Fonts 會以非同步方式顯示字型,並在應用程式中使用。適用對象 如需更多資訊,請參閱 Compose 可下載字型說明文件。