添加自定義字體

您現在可以使用運行時資源覆蓋 (RRO) 來更改字體。通過添加自定義字體來製作字體包,您可以在主題中使用字體並使用 RRO 來應用自定義。

完成以下任務:

custom-fonts.zip中提供了示例文件結構和示例文件。下載並在本地提取此文件供您自己使用。

製作字體包

製作字體包:

  1. 將所有字體ttf文件添加到vendor分區中的字體包中。例如:

    vendor/[oem]/fonts/[oem]-sans/

  2. 為字體包創建Android.mk文件。例如:

    vendor/[oem]/fonts/[oem]-[fontname]/Android.mk

  3. 確保模塊將安裝在etc文件夾的product分區中。為此,請確認模塊具有以下標誌:
    LOCAL_MODULE_CLASS := ETC
    LOCAL_PRODUCT_MODULE := true
    LOCAL_MODULE_PATH := $(TARGET_OUT_PRODUCT)/fonts
    

    上面提供的示例代碼說明了字體包模塊的完整定義。

  4. 為字體包創建一個名為fonts.mk的文件,然後將字體ttf文件添加到PRODUCT_PACKAGES中。例如:

    vendor/[oem]/fonts/[oem]-[fontname]/fonts.mk

    例如:

    PRODUCT_PACKAGES := \
    [font name].ttf \
    

創建設備覆蓋包

  1. 將一個名為fonts_customization.xml的模塊添加到構建中。該模塊指向包含字體系列的fonts_customization.xml文件,並調用所有字體包的 make 文件。例如:

    vendor/[oem]/[device]_overlay/fonts/Android.mk

  2. 創建字體系列:

    vendor/[oem]/[device]_overlay/fonts/fonts_customization.xml

    文件的根級別必須是fonts-modification標記。為該元素下的每個字體包添加字體系列。另外,為每個字體家族添加customizationType="new-named-family" ,並確保每個字體都有一個name屬性。此名稱稍後用於訪問字體系列。該文件必須添加到之前在Android.mk中定義的fonts_customizations.xml模塊中。

    上面提供的示例包含一個有效的fonts_customization.xml文件。

  3. 創建fonts.mk 。例如:

    vendor/[oem]/[device]_overlay/fonts/fonts.mk

  4. PRODUCT_PACKAGES標誌下添加fonts_customization.xml
  5. 調用每個先前創建的字體包。

    $(call inherit-product-if-exists, vendor/[oem]/fonts/[oem]-[fontname]/fonts.mk)

  6. 將字體模塊添加到PRODUCT_PACKAGES下的構建中,然後重新構建。字體將安裝在系統上。
  7. 驗證ttf字體文件是否位於設備上的/product/fonts文件夾中。
  8. 驗證fonts_customization.xml是否位於設備上的/product/etc/中。

使用新的系統字體系列

要使用新的系統字體系列:

<style name="customstyle">
    <item name="android:fontFamily">customfontfamily</item>
</style>