一、LVGL 内置字体
LVGL有几种不同大小的内置字体,可以通过 LV_FONT_MONTSERRAT_X 定义在 lv_conf.h 中启用。
-
普通字体
包含所有ASCII字符,度数符号(U + 00B0),项目符号(U + 2022)和内置符号,可以根据自己的需要选择定义 如下所示:#define LV_FONT_MONTSERRAT_8 0 #define LV_FONT_MONTSERRAT_10 0 #define LV_FONT_MONTSERRAT_12 0 #define LV_FONT_MONTSERRAT_14 1 #define LV_FONT_MONTSERRAT_16 0 #define LV_FONT_MONTSERRAT_18 0 #define LV_FONT_MONTSERRAT_20 0 #define LV_FONT_MONTSERRAT_22 0 #define LV_FONT_MONTSERRAT_24 0 #define LV_FONT_MONTSERRAT_26 0 #define LV_FONT_MONTSERRAT_28 0 #define LV_FONT_MONTSERRAT_30 0 #define LV_FONT_MONTSERRAT_32 0 #define LV_FONT_MONTSERRAT_34 0 #define LV_FONT_MONTSERRAT_36 0 #define LV_FONT_MONTSERRAT_38 0 #define LV_FONT_MONTSERRAT_40 0 #define LV_FONT_MONTSERRAT_42 0 #define LV_FONT_MONTSERRAT_44 0 #define LV_FONT_MONTSERRAT_46 0 #define LV_FONT_MONTSERRAT_48 0
-
特殊字体
LV_FONT_MONTSERRAT_12_SUBPX 0 // 与常规12像素字体相同,但具有亚像素渲染 LV_FONT_MONTSERRAT_28_COMPRESSED 0 // 与普通的28 px字体相同,但压缩字体为3 bpp LV_FONT_DEJAVU_16_PERSIAN_HEBREW 0 // 正常范围内的16像素字体+希伯来语,阿拉伯语,Perisan字母及其所有形式 LV_FONT_SIMSUN_16_CJK 0 // 16 px字体,具有正常范围+ 1000个最常见的CJK部首 LV_FONT_UNSCII_8 0 // 仅包含ASCII字符的8 px像素完美字体 LV_FONT_UNSCII_16 0 // 仅包含ASCII字符的16 px像素完美字体
-
内置符号
二、使用外部字体
在使用外部字体时,需要了解字体编码定义范围,见这么博主的文章:【LVGL(6)】显示中文设置,制作中文字库。
字体显示和图片一样,需要外部定义像素,所以我们也可以使用工具将字体转换成程序可以使用的变量,如下所示:
-
使用字体在线转换工具
LVGL 在线字体转换:https://lvgl.io/tools/fontconverter -
转换文字
-
将生成的文件导入工程中
三、字体使用
-
内部字体使用
lv_obj_t *test_label = lv_label_create(lv_scr_act()); lv_label_set_text(test_label, "test");
-
内置符号使用
lv_obj_t *test_label = lv_label_create(lv_scr_act()); lv_label_set_text(test_label, LV_SYMBOL_OK); // 正常显示,则应显示一个 ✓ 字符。
-
外部字体使用
在使用之前需要LV_FONT_DECLARE() 声明字体。
注意:想要使声明的字体全局可以,则在 lv_conf.h 文件中的 LV_FONT_CUSTOM_DECLARE 宏声明,如下图所示:
外部字体使用程序
/* 加载字体样式 */ static lv_style_t font_label_style; lv_style_init(&font_label_style); lv_style_set_text_font(&font_label_style, &test_font); lv_obj_t *test_label = lv_label_create(lv_scr_act()); lv_obj_add_style(test_label , &font_label_style, 0); lv_label_set_text(test_label , "测试字体");