写本文初衷是因为在使用lvgl的时候发现默认代码是不支持在界面显示中文的,需要显示中文需要加载中文字体,lvgl库本身也自带一个中文字体lv_font_simsun_16_cjk,据说可以显示中文,但是在使用过程中,查了很多文章都没有搞懂到底是如何从默认字体lv_font_montserrat_14切换为自带的中文字体lv_font_simsun_16_cjk,所以在此记录一下修改的过程,希望对有同样困惑的朋友提供一些帮助。

首先按照网上各种文章的说法,切换字体需要在lv_conf.h文件中将该字体的宏启用,即将宏定义的值由0改为1,如下图:

修改前:

修改后:

         修改完成后,在代码中声明字体,自带的内部字体可以不用声明,因为在lv_font.h文件中是已经有自带字体的声明:

最后是使用字体,即在自己的代码中设置字体,不管是通过style来设置,如:

还是通过直接调用字体设置函数来设置:

都是可以的,根据个人习惯来就好了。

但是这样操作之后,进行代码编译时会报如下错误:

从报错上看,是未定义的引用,也就是找不到这个便量的声明,所以会报错。但是明明已经在lv_font.h中使用了LV_FONT_DECLARE宏来声明这个字体的变量,为什么还是找不到呢, 查看了lv_font.h中包含的头文件发现,其包含了头文件lv_conf_internal.h,而在lv_font.h中使用LV_FONT_DECLARE宏是按条件启用的,如下图:

因此只有在宏LV_FONT_SIMU_16_CJK定义的值为1时,这里才会调用LV_FONT_DECLARE来声明字体变量。但这个宏不是在lv_conf.h中已经修改为1了吗,由于lv_conf_internal.h头文件包含了lv_conf.h,根据lv_conf_internal.h中的定义:

应该是在没有定义LV_FONT_SIMSUN_16_CJK的时候,才会在这里来定义。但实际操作发现,由于lv_conf_internal.h中对于lv_conf.h头文件的包含是有条件的,如图:

__has_include()这个判断比较有意思,用于确定lv_conf.h是否可以被包含,但这里并不会直接包含该头文件,只是在能包含的时候,再有下面的逻辑去包含该头文件。下面逻辑本身没有问题,但是这个__has_include("lv_conf.h")条件什么时候会是真,在这个条件增加一个#error "file not included"或者#warning "file not included"来重新编译发现,这里确实返回的结果是假,即不能包含lv_conf.h。然后将lv_conf.h头文件放到与lv_conf_template.h相同目录发现可以包含,然后根据相对目录修改__has_include("lv_conf.h")为自己项目中lv_conf.h的路径,也可以正常包含了。所以还是头文件包含路径的问题,最后在编译脚本中添加自己项目中lv_conf.h所在目录到引用头文件的路径中以后,直接修改lv_conf.h中的值就可以进行功能裁剪、字体切换等。

总结来说就是,lv_conf_internal.h是在lv_conf.h没有的时候,lvgl默认的功能裁剪头文件,如果不想加lv_conf.h也可以直接修改lv_conf_internal.h中的对应默认值来进行功能裁剪。一般正常的做法就是使用lv_conf.h来进行功能裁剪。

按照上述逻辑调整后,编译就可以正常通过。

如果代码里面写的中文在界面中还是没有显示,有个文章说的是要源码文件的编码也是UTF-8,我看了我的源文件编码都是UTF-8,可以检查下是否是这个原因导致的。

我的使用代码如下,是可以展示中文了:        

显示界面如下图:

虽然中文显示了,但是代码里面写的是“中文显示”,字库不全问题导致的。

lvgl库切换使用默认字体相关推荐

  1. Android 系统(72)---Android系统增加字体库及修改系统默认字体

    Android系统增加字体库及修改系统默认字体 阅读数:53 转载出处:https://blog.csdn.net/hsaekong/article/details/80305263 前言 最近项目上 ...

  2. Android系统增加字体库及修改系统默认字体

    转载请注明出处:https://blog.csdn.net/hsaekong/article/details/80305263 前言 最近项目上需要修改android系统默认字体,现把总结记录下,便于 ...

  3. Android 系统增加字体库及修改系统默认字体

    本文基于android9,看了android10.11.12基本也是一样: 一.Android系统增加字体库 1.把下面需要增加字体文件库copy到frameworks\base\data\fonts ...

  4. 很简单的在Ubuntu系统下安装字体和切换默认字体的方法

    开个传送门:https://my.oschina.net/itblog/blog/278566 感谢文章作者和其参考作者. 下附原文: 摘要: Ubuntu系统安装好后,默认字体对于中文的支持看上去不 ...

  5. Qt 在 Windows 下默认字体比较丑,但是我们有办法修改它

    一直觉得 Qt 在 Windows 系统上的默认字体不太好看,不过自己写程序时自己去指定字体也很方便,就没怎么在意.这几个月专门用 Qt 写了一些程序,发现这还真的是个问题,因为包括官方的 Qt Cr ...

  6. java修改JFrame默认字体

    修改默认字体的方法很简单.首先我们随便写一个按钮出来: import javax.swing.*;public class Test{static final int WIDTH = 300;stat ...

  7. python系统字体_Python matplotlib修改默认字体的操作

    matplotlib库作为Python常用的数据可视化库,默认字体居然不支持中文字体,必须得吐槽一下~ 闲言少叙,开始正文 方法1:在plot中指定prop参数 使用matplotlib.font_m ...

  8. unity修改默认字体

    注意问题,切换场景时需要重新配置一下*如若出现报错,再次配置一下即可 using UnityEngine; using UnityEditor; using System; using UnityEn ...

  9. OneNote 英文默认字体修改方法(2020.10)

    1 方法描述 OneNote 是一款非常好用的笔记软件,但是对中文的支持并不是很好,特别是对于英文默认字体的修改,不能通过简单的软件内部设置把 Calibri 字体更改为微软雅黑,这就导致我们经常在使 ...

最新文章

  1. 超简略的samba配置
  2. 对标SpaceX?B站也要发卫星了!
  3. java获取数据库的列名,类型等信息
  4. OpenGL绘制一个四边形
  5. C# 使用 DirectoryInfo 递归指定目录中的所有目录及文件
  6. mysql同步大师_数据库大师成长日记:您最需要了解的NoSQL非关系型数据库
  7. html表单中get与post之间的区别
  8. 关于ubuntu环境下gcc使用的几点说明
  9. 如何获取exception的target异常_三个好习惯,帮你写好Python里的异常处理
  10. Divide Two Integers leetcode java
  11. 广西计算机一级机试考试试题,2010年12月广西区计算机一级考试机试试题
  12. Android USB Camera(2) : UVC协议分析
  13. 正确姿势使用arm-linux-androideabi-addr2line
  14. C语言中位异或^简单讲解
  15. .NET Framework 3.5 安装错误:0x800F0906、0x800F081F、0x800F0907
  16. 九爷带你玩转 oracle
  17. 深度优先搜索/广度优先搜索
  18. 基于安卓Android和SSH的汽车票管理系统设计与实现
  19. java学习总结之集合框架
  20. NO PANIC!2019: A Blockchain Odyssey 上海启航

热门文章

  1. Winform设置居中屏幕
  2. 在vscode里java插件无法编译和运行java源代码,提示找不到符号踩坑记录
  3. tp框架中的facade
  4. 邮箱格式检测易语言代码
  5. 从12306抢票极限并发到秒杀系统核心架构
  6. 数据结构(严蔚敏版)习题集第三章课后标新号习题答案
  7. 无人零售货柜并入行业变革版图,带来智能化提升和消费升级
  8. lingo输出解的解释
  9. mac 苹果如何才能实现剪切文件
  10. SpringBoot脚手架搭建及运用