LVGL笔记9–lv_font字体
LVGL支持的字体有很多,而且有很好的抗锯齿特性,常用的是1bpp\2bpp\4bpp,旧版本最高支持8bpp抗锯齿,但是在新版本已经不在支持了,选择的bpp值越大,消耗的flash资源越多,通常使用4bpp就能达到非常好的显示效果,使用1bpp表示不进行抗锯齿,bpp值在生成字体时就要选择好,在使用中应根据硬件平台实际性能进行选择。littleVGL支持UTF-8编码,可以实现全球所有的字符显示,而且还支持“图标字体”。
LVGL支持的编码
LVGL支持两种编码:一种是ASCII编码,只能显示英文字符,一种是UTF-8编码,要想显示中文或其他文字,必须使用UTF-8编码(配置文件中默认使用utf-8)。
在lv_conf.h文件中通过如下宏进行启用
//启用 UTF-8 编码,LV_TXT_ENC_ASCII 是启用 ASCII 编码
#define LV_TXT_ENC LV_TXT_ENC_UTF8
当使用UTF-8编码时,需要将代码编辑软件也调成UTF-8编码模式。
//想显示啥,就直接写啥,当然了,前提是你的字库中有中国这俩个字
lv_label_set_text(label1,”text:中国”);
//如果不把编辑器改成UTF-8,显示中文字符需要如下使用转义字符
#define ZHONG “\xE4\xB8\xAD” //中字的 UTF-8 编码
#define GUO “\xE5\x9B\xBD” //国字的 UTF-8 编码
lv_label_set_text(label1,”text:” ZHONG GUO);
图标字体
可以将一下单色的图标转换成UTF-8编码,然后以字符方式进行显示,LVGL系统默认附带了一些图标字体,除此之外可以在“阿里巴巴矢量图标库”现在需要的图标,进行转换然后使用。
使用LVGL内置字体
LVGL内置5个字库,不过都是英文字符和一套相同的图标字体,想要显示中文需要自己制作字库。自带的图标全都声明在lv_symbol_def.h 头文件中。
lv_font_roboto_12
lv_font_roboto_16 //LVGL默认使用16号字体
lv_font_roboto_22
lv_font_roboto_28
lv_font_unscii_8 //单色屏可以使用此字符库
#define LV_FONT_ROBOTO_12 0 //是否使能 lv_font_roboto_12 字库
#define LV_FONT_ROBOTO_16 1 //是否使能 lv_font_roboto_16 字库,默认被使能了
#define LV_FONT_ROBOTO_22 0 //是否使能 lv_font_roboto_22 字库
#define LV_FONT_ROBOTO_28 0 //是否使能 lv_font_roboto_28 字库
#define LV_FONT_UNSCII_8 0 //是否使能 lv_font_unscii_8 字库
//这个是用来申明我们自己创建的字体的,如果没有创建字体,那么可以留空
#define LV_FONT_CUSTOM_DECLARE
//把 lv_font_roboto_16 定义为默认字体
#define LV_FONT_DEFAULT &lv_font_roboto_16
#define LV_FONT_FMT_TXT_LARGE 0 //当你的字库系统非常庞大时,比如字符数
//超过 10000 个,或者遇到某些莫名的错误时,那么你可以使能它
要使用自己创建的字体,都要先声明字体
LV_FONT_DECLARE(my_font_1); //申明 my_font_1 字体
//为了避免在每个地方都要去申明一次字体,我们可以直接利用 lv_conf.h 文件中的
LV_FONT_CUSTOM_DECLARE 配置宏来进行全局申明,如下所示:
#define LV_FONT_CUSTOM_DECLARE LV_FONT_DECLARE(my_font_1) \ LV_FONT_DECLARE(my_font_2)
字体使用方法如下
static lv_style_t label_style;
lv_style_copy(&label_style,&lv_style_plain_color); //样式拷贝
label_style.text.font = &lv_font_roboto_16; //设置字体
lv_label_set_style(label1,LV_LABEL_STYLE_MAIN,&label_style); //给标签对象设置样式
lv_label_set_text(label1,"Hello"); //纯字符方式
lv_label_set_text(label1,"Hello" LV_SYMBOL_OK); //字符和图标组合方式
//多个图标组合方式,注意图标与图标之间至少得需要一个空格
lv_label_set_text(label1, LV_SYMBOL_OK LV_SYMBOL_CLOSE);
创建自己的字体(包含图标字体)
littleVGL官方提供了字体生成工具,可以直接生成.c文件。在线工具使用地址 https://littlevgl.com/ttf-font-to-c-array
littleVGL使用6.0版本时,lv_font_fmt_txt.h文件中第103行需要加上一个const 否则编译报错。