Android 8.0 (API 級別 26) 和 Android 支援資料庫 26 版推出了支援 API 向供應程式的應用程式要求字型,而不是將檔案搭售在應用程式中,或是讓應用程式下載字型。這項功能可透過支援資料庫 26 版在搭載 Android API 14 以上版本的裝置上執行。
可下載字型功能具備以下優點:
- 縮減應用程式的大小,進而提高應用程式的安裝成功率
- 改善系統的整體健康情況,因為多個應用程式可以透過一個供應程式共用相同字型。這樣可以節省使用者的行動數據、手機記憶體和磁碟空間。在此模式中,系統會在需要時透過網路擷取字型。
請參閱下列相關資源:
可下載字型功能如何運作?
字型供應程式這類應用程式可用於擷取字型並快取至本機,讓其他應用程式能夠要求及分享字型。圖 1 說明使用流程。

基本資訊
您可透過下列方式使用可下載字型功能:
透過 Android Studio 和 Google Play 服務使用可下載字型
您可以將應用程式設定為使用 Android Studio 3.0 以上版本下載字型。為了協助您開始使用可下載字型功能,您可以使用 Google Play 服務的字型供應程式。
注意:裝置必須搭載 Google Play 服務 11 以上版本,才能使用 Google Fonts 供應程式。
- 在「Layout Editor」(版面配置編輯器) 中,選取一個 TextView,然後在「Properties」(屬性) 下方,依序選取「fontFamily」>「More Fonts」(更多字型)。
圖 2. 使用「Layout editor」(版面配置編輯器) 系統會隨即顯示「Resources」(資源)視窗。
- 在「Source」(來源) 下拉式清單中,選取「Google Fonts」(Google 字型)。
- 在「Fonts」(字型) 方塊中選取一種字型。
- 選取「Create downloadable font」(建立可下載字型),然後按一下「OK」(確定)。
注意:如果要在應用程式中隨附字型,請選取「Add font to project」(新增字型至專案)。
圖 3. 從「Resources」(資源) 視窗中選取字型
Android Studio 會自動產生在應用程式中正確呈現字型所需的相關 XML 檔案。

透過程式輔助方式使用可下載字型
在 Android 8.0 版 (API 級別 26) 之前,支援資料庫 26.0 版已全面支援可下載字型。如果要進一步瞭解如何使用支援資料庫,請轉至「可下載字型支援資料庫」章節。
如果要透過程式輔助方式使用可下載字型功能,您需與以下兩個主要類別互動:
android.graphics.fonts.FontRequest
:此類別可讓您建立字型要求。FontsContract
:此類別可讓您依據字型要求建立新的Typeface
物件。
應用程式使用 FontsContract
API 從字型供應程式擷取字型。每個供應程式對其支援的 Android 版本和查詢語言都有專屬的一組限制。如果要進一步瞭解 Android 版本和查詢格式,請參閱供應程式的說明文件。
如果要下載字型,請執行下列步驟:
- 建立
android.graphics.fonts.FontRequest
類別的執行個體,以向供應程式要求字型。如果要建立要求,請傳遞下列參數:- 字型供應程式的授權
- 用於驗證供應程式身分的字型供應程式套件
- 字型的字串查詢。如果要進一步瞭解查詢格式,請參閱字型供應程式的說明文件,例如 Google Fonts (Google 字型)。
- 憑證的一系列雜湊組合,用於驗證供應程式的身分。
注意:如果您向預先安裝的供應程式要求字型,無需新增憑證。不過,如果您透過支援資料庫要求字型,一律必須提供憑證。
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);
注意:您可以接收來自字型供應程式的參數值。Android Studio 會為其支援的供應程式在使用者介面中自動填入這些值。
- 建立
FontsContract.FontRequestCallback
類別的執行個體。 - 覆寫
onTypefaceRetrieved()
方法,表示字型要求已完成。提供擷取的字型做為參數。您可以使用此方法,視需要設定字型。舉例來說,您可以對TextView
設定字型 - 覆寫
onTypefaceRequestFailed()
方法,以接收字型要求過程中發生錯誤的相關資訊。如果要進一步瞭解錯誤代碼,請參閱error code constants
。 - 呼叫
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);
如要進一步瞭解如何從字型供應程式下載字型,請參閱可下載字型範例應用程式 Java | Kotlin。
透過支援資料庫使用可下載字型
支援資料庫 26 支援在搭載 Android API 14 及更高版本的裝置上使用可下載字型功能。android.support.v4.provider
套件包含 FontsContractCompat
和 FontRequest
類別,可導入回溯相容的可下載字型功能支援。支援資料庫類別包含與架構類似的方法。下載字型的程序與 下載字型 一節所述的程序類似。
如果要使用支援資料庫下載字型,請從 android.support.v4.provider
套件匯入 FontsContractCompat
和 FontRequest
類別。建立這些類別的執行個體,而不是 FontsContract
和 android.graphics.fonts.FontRequest
架構類別。
注意:透過支援資料庫要求字型時,您 必須 提供憑證。就算是預先安裝的字型供應程式也同樣適用。
新增支援資料庫依附元件
如果要使用 FontsContractCompat
和 FontRequest
類別,您必須在開發環境中修改應用程式專案的類別路徑依附元件。
如果要在應用程式專案中新增支援資料庫:
- 開啟應用程式的
build.gradle
檔案。 - 將支援資料庫新增至
dependencies
區段。
Groovy
dependencies { ... implementation "com.android.support:support-compat:28.0.0" }
Kotlin
dependencies { ... implementation("com.android.support:support-compat:28.0.0") }
使用可下載字型作為 XML 中的資源
Android 8.0 (API 級別 26) 和支援資料庫 26 可讓您以更快速便捷的方式,在 XML 版面配置中宣告自訂字型為資源。也就是說,不需要將字型綑綁為素材資源。您可以為整個主題定義自訂字型,並藉此提升多種粗細和樣式 (例如 Bold、Medium 或 Light) 的可用性。
- 在
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" />
新增憑證
如果未預先安裝字型供應程式或要使用支援資料庫,您必須宣告字型供應程式簽署所用的憑證。系統會使用憑證來驗證字型供應程式的身分。
注意:如果您在 Android Studio 中使用字型選取器工具,Android Studio 就可以自動填入 Google Play 服務供應程式的值。如果要進一步瞭解如何使用 Android Studio 下載字型,請參閱 透過 Android Studio 和 Google Play 服務使用可下載字型 章節。
請執行下列步驟新增憑證:
- 建立一個包含憑證詳細資料的字串陣列。如果要進一步瞭解憑證詳細資訊,請參閱字型供應程式的說明文件。
- 將
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 可下載字型說明文件。