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

免责声明:文章转载自《android多字体切换》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Caused by: java.io.FileNotFoundException: class path resource [mappers/*.xml] cannot be opened because it does not existAndroid 让你的 Room 搭上 RxJava 的顺风车 从重复的代码中解脱出来下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

CSS-顶部滚动进度条

Documentbody{background-image:linear-gradient(torighttop,#f0050%,#ece50%);background-repeat:no-repeat;height:300vh;position:relative;background-size:100%calc(100%-100vh+5px);}body:...

14款优秀的JavaScript调试工具大盘点

官方网站:http://www.jshint.com/4.Grunt Grunt是一个基于任务的命令行构建工具,适用于JavaScript项目。Venkman旨在为Mozilla提供一个基于浏览器的强大JavaScript调试环境。官方网站:http://www.my-debugbar.com/wiki/CompanionJS/HomePage10.Simp...

解决IDEA打包出现中文乱码的问题

解决方案:1.打开IDEA文件中的设置。...

c# Socket心跳试验,自定义发送包 和 使用KeepAlive

我记录了我心跳的位置,但WireShark无法检测到正在发送的消息,主要是因为发送的数据大小为0。如果网络电缆被拔掉,下次检测到心跳时就会报告错误。虽然这种方法可以检测套接字是否断开,但它不是很好,响应也不及时。当使用KeepAlive时,WireShark通常会检测到它不停地向Socket服务器发送消息,即心跳检测。图:通过三次握手(前三次握手)建立连接后...

input框输入金额处理的解决办法

最近,已经启动的项目在删除输入输入量时突然出现问题。各种在线搜索都没有找到你想要的。今天,我将以react框架为例进行代码贡献。我会写下需求和解决方案,希望对我的朋友有用。如果有更好的方法实现它,请给我一些建议!”在“:”下;n=数学。防抱死制动系统;vars=“”;对于{s+=.replace;}S=S||“整数”;n=数学。地板对于{varp=“”;对于...

H3C 12508 收集诊断信息

案例:H3C12508单板卡出现remove状态,需要配合研发收集诊断信息。)总体:12500交换机返回三种文件----故障时诊断信息,主备单板的日志文件,主备单板的诊断日志操作步骤:一、故障时诊断信息:disdiagnostic-informationdiag收集必须在问题出现的时候,单板重起之前执行。在save时请选择Y保存到CF卡方式。一般情况下,此命...