android多字体切换
一、 添加字库
1.把对应的字库文件拷贝到 frameworks/base/data/fonts 下
修改skia/src/ports/SkFontConfigInterface_android.cpp
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 值即可