在前面几篇博客文章中,已经对LVGL的移植和使用进行了较为详细的介绍,在本文中将讲解如何在LVGL的控件中显示中文字体及其它语言字体。
LVGL在VScode中安装模拟器运行配置笔记教程_vscode lvgl-CSDN博客
LVGL移植到STM32 MCU平台详细经验笔记教程-CSDN博客
提醒:加入字库后,必须让工程代码处于UTF-8编码模式下,否则文字显示会出问题
1、LVGL自带汉字库CJK
在LVGL的官方库中,其实已经内置了一个CJK中文字库:中日韩越统一表意文字(CJKV Unified Ideographs),目的是要把分别来自中文、日文、韩文中,本质相同、形状一样或稍异的表意文字(主要为汉字,但也有仿汉字如日本国字、韩国独有汉字)于ISO 10646及Unicode标准内赋予相同编码。越南文后来亦加入此计划,所以亦有“CJKV”的称呼。
CJK库位于LVGL的路径下的src文件夹下的font子文件夹中:lv_font_simsun_16_cjk.c,这个文件中包含了日常使用的汉字数量有数千个。
虽然该库日常使用的汉字数量有数千个,再加上生僻字,数量达到数万个,但缺少很多简体中文中经常使用的汉字,如“问”字。因此在使用之前,可以点击该字库,去查找是否能够满足项目场景中需要使用的汉字,如果不能满足,则需要进行下面开始的工作,即往LVGL库中添加汉字字库或其它语言的字库。
使用自带的CJK汉字库需要将lv_conf.h文件中的CJK字库宏定义开启,否则不能使用。
2、自定义LVGL汉字库
除了使用LVGL系统自带的CJK汉字库外,还可以采取自定义汉字库的形式,这就需要我们准备这两个东西:字体文件和字体转换器。
字体文件可以互联网上随便下载,如浏览器直接搜索:GB2312字体下载;如果使用LVGL官方的字体转换器,那么下载的字体文件必须是TTF/WOFF格式的。使用其它平台的字体转换器,则需要根据对应字体转换平台的要求进行下载。
在本笔记教程中,直接搜索下载了GB2312楷体的ttf格式字体文件,字体文件下载打开后如下图所示。
在准备好字体文件后,可以直接进入LVGL官方的在线字体转换工具网站:Online font converter - TTF or WOFF fonts to C array | LVGLhttps://lvgl.io/tools/fontconverter
将LVGL文件加入到工程中时,如果需要使用生成的字体,需要将字体进行声明:
//LV_FONT_DECLARE(字体名);
LV_FONT_DECLARE(lv_font_gb2312_regular_script_14);
//样式中设置字体API接口:
lv_obj_set_style_text_font(); //私有(本地)样式
lv_style_set_text_font(); //普通(共享)样式
自定义的中文字库加入到工程中,编译运行后的效果图如下图所示:
提醒:加入字库后,必须让工程代码处于UTF-8编码模式下,否则文字显示会出问题
如果是使用 MDK KEIL平台切换为UTF-8编码后,程序编译报错:error: #8: missing closing quote
在如下图所示的Misc Controls中添加:--locale=english ,即可解决上述的报错信息
3、Unicode编码表
Unicode 是国际标准字符集,它将世界各种语言的每个字符定义一个唯一的编码,以满足跨语言、跨平台的文本信息转换
Unicode 字符集的编码范围是 0x0000 - 0x10FFFF , 可以容纳一百多万个字符, 每个字符都有一个独一无二的编码,也即每个字符都有一个二进制数值和它对应,这里的二进制数值也叫 码点 , 比如:汉字 "中" 的 码点是 0x4E2D, 大写字母 A 的码点是 0x41。
Unicode官网可以查询具体的字符编码值:Unicode – The World Standard for Text and Emoji
汉字编码范围部分表:
字符Unicode分布表: