更多内容请访问:鸿蒙科技社区与华为官方共建https://harmonyos.51cto.com/#zz老规矩先跑起来字体效果演示视频:演示视频(附近上传了三个demo视频中提到的字体包、demo应用的hap、demo应用的源码)然后说一下故事的背景:现有的API:SetFont已经提供了修改字体的功能,感觉不自在的看着系统里思源黑黑的身子。我想把它换成另一个。一开始以为随便调一下就OK了。根据目前的文件,我看不到它。去源码中查看相关API的用法,发现源码中确实只有一个字体包,SourceHanSansSC-Regular.otf。然后我就简单的想,就放一个字体包吧,整个源码的逻辑应该是顺理成章的,我就多找了几个包扔进去。事实证明我又错了,不过我还是本着精神再试了做coder的。。。最后在看代码的时候,发现整个逻辑是一致的,就是我在添加识别字体包的部分写死了,于是改了代码,然后把自己喜欢的字体包扔到对应的目录下,修改Build.gn打包编译,然后重新烧写系统,就可以在子代码中调用自己扔进去的字体包了。好了,其实上面的背景描述已经基本讲完了添加字体包的整个过程。下面详细说一下:1、下载你要的字体包。目前的测试结果是我能随机找到3个ttf格式的字体包。目测应该是几乎通用的字体包(PS:我下载的那个三个字体包:木妖软笔手写、趵突小白、王汉宗看管六番。大家可以去附件里随便下载),然后放在源代码目录下的foundation/graphic/lite/utils/fonts文件夹中。2、将字体包放入指定文件夹后,需要修改Build.gn,对字体包进行打包编译。3、修改foundation/graphic/lite/frameworks/ui/src/font/graphic_startup.cpp,在fontInfo_结构中加入你添加的字体包名。4、因为我们修改了基础层的系统代码,所以需要对3516重新编程,然后使用SetFont系统API调用我们添加的字体包。1、下载字体包,放在指定位置(foundation/graphic/lite/utils/fonts),自己改中文字体包的名字,chmod+x加一个可执行权限,就近下载不想找到它。见下图:2、修改BUILD.gn,将添加的字体包打包到系统中。修改文件的完整路径为:foundation/graphic/lite/utils/BUILD.gn。第一段代码以git的形式查看。第二段我直接贴出修改后的文件内容。您可以将其与旧文件比较修改共享if(board_name=="hi3516dv300"){copy("utils_config"){-sources=["fonts/SourceHanSansSC-Regular.otf"]-outputs=["$root_out_dir/data/SourceHanSansSC-Regular.otf"]+sources=["fonts/wangHangZong.ttf","fonts/baotuxiaobaiti.ttf","fonts/Muyao-Softbrush.ttf","fonts/SourceHanSansSC-Regular.otf"]^M+outputs=["$root_out_dir/data/{{source_file_part}}"]^M}}修改文件内容:if(board_name=="hi3516dv300"){copy("utils_config"){sources=["fonts/wangHangZong.ttf","fonts/baotuxiaobaiti.ttf","fonts/Muyao-Softbrush.ttf","fonts/SourceHanSansSC-Regular.otf"]outputs=["$root_out_dir/data/{{source_file_part}}"]}}然后是时候画出重点了:3.将自己添加的字体包写入系统中负责处理字体库的结构体:fontInfo_。要达到这个目的,需要在foundation/graphic/lite/frameworks/ui/src/font/graphic_startup中添加在.cpp中添加如下代码:(第一段也是git方法,第二段直接贴修改后的代码,大家可以自己对比一下)---a/frameworks/ui/src/common/graphic_startup。cpp+++b}+ret=pFont->RegisterFontInfo("Muyao-Softbrush.ttf");+if(ret==INVALID_RET_VALUE){+GRAPHIC_LOGW("SetTtfNamefailed");+}+ret=pFont->RegisterFontInfo("baotuxiaobaiti.ttf");+if(ret==INVALID_RET_VALUE){+GRAPHIC_LOGW("SetTtfNamefailed");+}+ret=pFont->RegisterFontInfo("wangHangZong.ttf");+if(ret==INVALID_RET_VALUE){+GRAPHIC_LOGW("SetTtfNamefailed");+}}}修改后的文件内容:voidGraphicStartUp::InitFontEngine(uintptr_tpsramAddr,uint32_tpsramLen,constchar*dPath,constchar*ttfName){UIFont*pFont=UIFont::GetInstance();if(pFont==nullptr){GRAPHIC_LOGE("GetUIFonterror");返回;}int8_tret=pFont->设置PsramMemory(psramAddr,psramLen);if(ret==INVALID_RET_VALUE){GRAPHIC_LOGE("SetPsramMemoryfailed");return;}//fontandglyphpathret=pFont->SetFontPath(const_cast
