您現在可以使用運行時資源覆蓋 (RRO) 來更改字體。通過添加自定義字體來製作字體包,您可以在主題中使用字體並使用 RRO 來應用自定義。
完成以下任務:
custom-fonts.zip中提供了示例文件結構和示例文件。下載並在本地提取此文件供您自己使用。
製作字體包
製作字體包:
- 將所有字體
ttf
文件添加到vendor
分區中的字體包中。例如:vendor/[oem]/fonts/[oem]-sans/
- 為字體包創建
Android.mk
文件。例如:vendor/[oem]/fonts/[oem]-[fontname]/Android.mk
- 確保模塊將安裝在
etc
文件夾的product
分區中。為此,請確認模塊具有以下標誌:LOCAL_MODULE_CLASS := ETC LOCAL_PRODUCT_MODULE := true LOCAL_MODULE_PATH := $(TARGET_OUT_PRODUCT)/fonts
上面提供的示例代碼說明了字體包模塊的完整定義。
- 為字體包創建一個名為
fonts.mk
的文件,然後將字體ttf
文件添加到PRODUCT_PACKAGES
中。例如:vendor/[oem]/fonts/[oem]-[fontname]/fonts.mk
例如:
PRODUCT_PACKAGES := \ [font name].ttf \
創建設備覆蓋包
- 將一個名為
fonts_customization.xml
的模塊添加到構建中。該模塊指向包含字體系列的fonts_customization.xml
文件,並調用所有字體包的 make 文件。例如:vendor/[oem]/[device]_overlay/fonts/Android.mk
- 創建字體系列:
vendor/[oem]/[device]_overlay/fonts/fonts_customization.xml
文件的根級別必須是
fonts-modification
標記。為該元素下的每個字體包添加字體系列。另外,為每個字體家族添加customizationType="new-named-family"
,並確保每個字體都有一個name
屬性。此名稱稍後用於訪問字體系列。該文件必須添加到之前在Android.mk
中定義的fonts_customizations.xml
模塊中。上面提供的示例包含一個有效的
fonts_customization.xml
文件。 - 創建
fonts.mk
。例如:vendor/[oem]/[device]_overlay/fonts/fonts.mk
- 在
PRODUCT_PACKAGES
標誌下添加fonts_customization.xml
。 - 調用每個先前創建的字體包。
$(call inherit-product-if-exists, vendor/[oem]/fonts/[oem]-[fontname]/fonts.mk)
- 將字體模塊添加到
PRODUCT_PACKAGES
下的構建中,然後重新構建。字體將安裝在系統上。 - 驗證
ttf
字體文件是否位於設備上的/product/fonts
文件夾中。 - 驗證
fonts_customization.xml
是否位於設備上的/product/etc/
中。
使用新的系統字體系列
要使用新的系統字體系列:
<style name="customstyle"> <item name="android:fontFamily">customfontfamily</item> </style>