zoukankan      html  css  js  c++  java
  • 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 值即可



  • 相关阅读:
    CPU飙高,OOM排查?
    反射
    Mybatits
    spring 基础问题
    java中格式化数字0和#区别
    java中File对象的mkdir和mkdirs的区别
    java截取字符串几种方式
    java工厂模式
    Java获取文件路径的几种方式
    jxl生成excel时,增加批注和冻结窗口
  • 原文地址:https://www.cnblogs.com/chengliu/p/4130617.html
Copyright © 2011-2022 走看看