使用到的软件
LvglFontTool.exe
字符转换工具
链接:
http://www.lfly.xyz/forum.php?mod=viewthread&tid=24&extra=page%3D1
软件界面
按照软件界面配置
1. 打开lvgl源码中,lv_conf.h 文件,测试例程使用V7.7.0版本
在420行加入以下代码
#define LV_FONT_CUSTOM_DECLARE LV_FONT_DECLARE(myFont)
// LV_FONT_DECLARE(myFont) “myFont” 是对应软件界面中,请输入的字体名字一栏中的名称
在481行加入以下代码
#define LV_THEME_DEFAULT_FONT_NORMAL &myFont //默认生成的字体文件
注意:
有四种字体显示:小,默认,副标题,标题,我们选择默认的
#define LV_THEME_DEFAULT_FONT_SMALL &lv_font_montserrat_16 //小字体
#define LV_THEME_DEFAULT_FONT_NORMAL &myFont //默认字体,我们默认使用这个
#define LV_THEME_DEFAULT_FONT_SUBTITLE &lv_font_montserrat_16 //副标题字体
#define LV_THEME_DEFAULT_FONT_TITLE &lv_font_montserrat_16 //标题字体
2. 将软件生成的代码,保存为 .c 文件,放入到lvgl合适工程目录下, 注意文件包含路径
/*
*---------------------------------------------------------------
* Lvgl Font Tool
*
* 注:使用unicode编码
* 注:本字体文件由Lvgl Font Tool V0.3 生成
* 作者:阿里(qq:617622104)
*---------------------------------------------------------------
*/
#include "../../lvgl.h" //放入的工程目录不对可能报错,这里建议放入lvgl源文件上层目录
注意:将取出来的 .c 文件转成UTF-8,直接记事本打开另存为下面有一个可以选择为UTF-8,并且使用到的文件也要转成UTF-8才可以使用。
3. 示例代码
#pragma execution_character_set("utf-8") //vs2019仿真要显示中文还要加上预编译指令,否则不会显示中文
lv_obj_t* scr_1;
lv_obj_t* scr_2;
void lv_myfont(void)
{
scr_1 = lv_scr_act(); /* 获取当前的活动屏幕 */
lv_obj_t* labe1 = lv_label_create(scr_1, NULL); /* 在当前活动屏幕中创建一个标签 */
/* 设置标签在超出所设定的范围宽度后执行的模式,6种工作模式,具体查看说明*/
lv_label_set_long_mode(labe1, LV_LABEL_LONG_SROLL_CIRC);
lv_label_set_recolor(labe1, true); /* 失能标签字体可以重新着色,不失能的话默认黑色*/
lv_label_set_align(labe1, LV_LABEL_ALIGN_CENTER); /* 设置标签所在的屏幕位置 */
/* 写入标签中的文字,文字重新着色(前提开启重新着色设置),文字超出范围后的排序由 " lv_label_set_long_mode " 函数指定 */
/* "LV_SYMBOL_OK ..." 是LVGL自带的一些小图标 */
lv_label_set_text(labe1, LV_SYMBOL_OK LV_SYMBOL_AUDIO "#0000ff Re-col;;or# #ff00ff words# #ff0000 of a# label "
"and wrap long text automatically.");
lv_obj_set_width(labe1, 150); /* 设置标签的宽度,文字信息填入这个范围中 */
lv_obj_set_height(labe1, 48); /* 设置标签的高度,文字信息填入这个范围中,如果文字高度大于设置的,只显示文字高度的一部分 */
lv_obj_align(labe1, NULL, LV_ALIGN_CENTER, 0, 0); /* 以屏幕位中心为相对坐标(相对坐标可设置),设置标签的X Y坐标 */
lv_obj_t* labe2 = lv_label_create(scr_1, NULL);
lv_label_set_recolor(labe2, true); /* 失能标签字体可以重新着色,不失能的话默认黑色*/
lv_label_set_long_mode(labe2, LV_LABEL_LONG_BREAK); /*Circular scroll*/
lv_obj_set_width(labe2, 150);
lv_label_set_text(labe2,"#ff00ff 你好# It is a circularly scrolling text . ");
lv_obj_align(labe2, NULL, LV_ALIGN_CENTER, 0, 30);
}
实际效果图