添加自定义字体

您现在可以使用运行时资源叠加 (RRO) 来更改字体。通过添加自定义字体以制作字体包,您可以在主题中使用字体,并使用 RRO 应用自定义设置。

完成以下任务

custom-fonts.zip 中提供了示例文件结构和示例文件。下载并解压缩此文件以供您自己使用。

制作字体包

制作字体包的步骤

  1. 将所有字体 ttf 文件添加到 vendor 分区中的字体包。例如

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

  2. 为字体包创建 Android.mk 文件。例如

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

  3. 确保该模块将安装在 product 分区中的 etc 文件夹中。为此,请确认该模块具有以下标志
    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>