1.把对应的字库文件拷贝到 frameworks/base/data/fonts 下
2.修改 fonts.mk (frameworks/base/data/fonts)
+++ b/frameworks/base/data/fonts/fonts.mk
@@ -48,3 +48,4 @@ PRODUCT_PACKAGES := \
AndroidClock.ttf \
AndroidClock_Highlight.ttf \
AndroidClock_Solid.ttf \
+ DFPShaoNvW5-GB.ttf \
3.修改 android.mk
+++ b/frameworks/base/data/fonts/Android.mk
@@ -139,6 +139,7 @@ font_src_files += \
DroidSansHebrew-Bold.ttf \
DroidSansArmenian.ttf \
DroidSansGeorgian.ttf \
+ DFPShaoNvW5-GB.ttf \
AndroidEmoji.ttf
二、修改 ttf 加载路径
修改skia/src/ports/SkFontConfigInterface_android.cpp
#include <string.h>
+#include <cutils/properties.h>
#ifndef SK_DEBUG_FONTS
#define SK_DEBUG_FONTS 0
@@ -174,13 +175,25 @@ static bool has_font(const SkTArray<FontRec>& array, const SkString& filename) {
#endif
static void get_path_for_sys_fonts(SkString* full, const char name[]) {
- if (gTestFontFilePrefix) {
+ static char args[PROPERTY_VALUE_MAX];
+ property_get("persist.sys.usedmyfont", args, "default");
+ //
+ if (gTestFontFilePrefix) {
full->set(gTestFontFilePrefix);
} else {
full->set(getenv("ANDROID_ROOT"));
full->append(SK_FONT_FILE_PREFIX);
}
- full->append(name);
+// full->append(name);
+ if(strstr(args, "hksv")){
+ full->append("DFPShaoNvW5-GB.ttf");
+ }else
+ full->append(name);
}
三、 实现上层切换功能
1、上层 app( 比如 setting) 实现可以切换字体的 ui 选项。
2、需要定义个配置变量 persist.sys.usedmyfont(例如:system.prop):
当字体切换到默认字体时 SystemProperties.set("persist.sys.usedmyfont", "default");
当使用其它字体时,如华康少女 SystemProperties.set("persist.sys.usedmyfont", "hksv");
3、因为这个功能是要重新加载字库文件,因此必须要实现切换字体后要重启手机功能。
4、如果要是实现单个字体切换只需相应修改 getFullPathForSysFonts 这函数以及persist.sys.usedmyfont 值即可