• android多字体切换


    一、 添加字库
    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 值即可



  • 相关阅读:
    Appium+unittest+PageObject实例
    monkeyrunner简单用法
    Mac电脑修改系统文件夹的权限
    UIImage剪切
    LLDB 打印 frame
    打开qq在线聊天
    获取当地时间
    微信支付SDK使用心得
    获取当前星期几
    UIView相对于屏幕的frame
  • 原文地址:https://www.cnblogs.com/chengliu/p/4130617.html
Copyright © 2020-2023  润新知