一、product下预置新字体
系统源生提供了定制化增加字体文件的方式,可以在不修改源生代码的情况下进行定制增加。
product下的预置参考了google提供的预置方式。
Adding Custom Fonts | Android Open Source Project
模板代码文件为custom-fonts.zip文件
方案的主要工作是:
- 将定制的fonts_customization.xml配置文件编译到系统中。
- 将自定义的字体ttf文件编译到系统中。
1.预置fonts_customization.xml文件
mydevice_overlay/fonts/Android.mk
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := fonts_customization.xml
LOCAL_MODULE_CLASS := ETC
LOCAL_PREBUILT_MODULE_FILE := $(LOCAL_PATH)/fonts_customization.xml
LOCAL_PRODUCT_MODULE := true
include $(BUILD_PREBUILT)
mydevice_overlay/fonts/fonts.mk
PRODUCT_PACKAGES := \
fonts_customization.xml \
$(call inherit-product-if-exists, vendor/XXX/fonts/oem-lobster/fonts.mk)
mydevice_overlay/fonts/fonts_customization.xml
这个文件是增加了一个名为lobster的字体,使用的字体文件为Lobster-Regular.ttf
<fonts-modification version="1">
<family customizationType="new-named-family" name="lobster">
<font weight="400" style="normal">Lobster-Regular.ttf</font>
</family>
</fonts-modification>
2.预置ttf文件
/fonts/oem-lobster/fonts.mk
PRODUCT_PACKAGES := \
Lobster-Regular.ttf \
/fonts/oem-lobster/Android.mk
LOCAL_PATH := $(call my-dir)
# Build the rest of font files as prebuilt.
# $(1): The source file name in LOCAL_PATH.
# It also serves as the module name and the dest file name.
define build-one-font-module
$(eval include $(CLEAR_VARS))\
$(eval LOCAL_MODULE := $(1))\
$(eval LOCAL_SRC_FILES := $(1))\
$(eval LOCAL_MODULE_CLASS := ETC)\
$(eval LOCAL_MODULE_TAGS := optional)\
$(eval LOCAL_MODULE_PATH := $(TARGET_OUT_PRODUCT)/fonts)\
$(eval LOCAL_PRODUCT_MODULE := true) \
$(eval include $(BUILD_PREBUILT))
endef
font_src_files := \
Lobster-Regular.ttf \
$(foreach f, $(font_src_files), $(call build-one-font-module, $(f)))
build-one-font-module :=
font_src_files :=
上传/fonts/oem-lobster/Lobster-Regular.ttf文件
3.在系统的编译mk中添加对此新增mk的引用
例如/device/common/common.mk
$(call inherit-product-if-exists, vendor/XXX/fonts/mydevice_overlay/fonts/fonts.mk)
二、字体使用
之后,在应用中便能够使用lobster字体了
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="text"
android:fontFamily="lobster"/>