LVGL_label 标签控件介绍

关键字 :NXPLVGL

1、概述

       lv_label 标签控件是 LVGL(Light and Versatile Embedded Graphics Library)中最基础控件之一,使用也十分频繁,主要作用就如标签的意义一样,用来显示文本信息的。就如学习的第一行代码都是hello world 一样,学习 LVGL 的使用也可以从创建第一个 label 标签控件开始。

       label 标签控件既可以动态修改文本内容,也可以通过接口来引用一个外部的char_array 文本指针修改文本内容,这样 LVGL 内部不会为这个文本内容分配堆空间,从而可以减少内存的使用,label 标签控件还支持自定义图标字体、换行部分文本重绘色等显示功能,有着 6 种文本显示模式。

 

2、长文本显示模式

      通过 lv_label_set_long_mode(lv_obj_t * label, lv_label_long_mode_t long_mode); 接口设置 LVGL 标签控件的 6 种文本显示模式,long_mode 参数的取值会影响到标签对象的大小,默认值下长文本模式默认为 LV_LABEL_LONG_EXPAND。
      下面是 6 种 long_mode 参数的模式 :

 

1)LV_LABEL_LONG_EXPAND

       该模式下,lv_obj_set_size 接口所设置的标签控件大小无效,标签的高宽会随着文本的内容进行横向和纵向的扩展,不自动换行但可以通过长文本种 ‘\n’ 字符换行。

      

2) LV_LABEL_LONG_BREAK

       该模式下,lv_obj_set_size 接口所设置的标签控件大小,仅宽度有效,会随文本内容自动换行,高度随之纵向的扩展。

      

3) LV_LABEL_LONG_DOT

      该模式下,lv_obj_set_size 接口所设置的标签控件大小,宽高度有效,会随文本内容自动换行,显示不下时,在文本的末尾显示一个 ‘...‘ 省略号,可设置省略号的数目。

      

4) LV_LABEL_LONG_SROLL

       该模式下,lv_obj_set_size 接口所设置的标签控件大小,宽高度有效,当显示不下时,会左右反复滚动显示。

 

5) LV_LABEL_LONG_SROLL_CIRC

       该模式下,lv_obj_set_size 接口所设置的标签控件大小,宽高度有效,当显示不下时,会向右环形滚动显示。

 

6) LV_LABEL_LONG_CROP

      该模式下,lv_obj_set_size 接口所设置的标签控件大小,宽高度有效,当显示不下时,不显示超出部分如被剪切一样。

     

     需注意! lv_label_set_long_mode()接口调用与 lv_obj_set_size()接口调用的顺序需要注意,lv_label_set_long_mode()需要放在lv_obj_set_size()前。

3、文本重绘色功能

       LVGL 有着较为特别的重绘色功能,可在一个标签里可以含有多种不同颜色的文本,重绘色格式:#十六进制颜色值 文本#

       十六进制颜色值和文本之间至少得有一个空格。

       void lv_label_set_recolor(lv_obj_t * label, bool en); 接口使能文本重绘色功能。

      

4、图标字体

      标签控件可以显示一些常用小图标,当作字体来显示,但如同字体一样只能显示单色,支持重绘色功能。

      在 lv_symbol_def.h 头文件有关于系统自带的图标字符,需要申明字体以及 LV_FONT_DECLARE 宏的定义。

4.1、创建图标字体

    首先获取 ttf/woff/woff2 格式的字体文件,可以在网上搜索免费图标网站,

      


      下载得到 iconfont.ttf 字体文件后,接下来通过创建图标字库的命令,

      lv_font_conv --no-compress --format lvgl --font “iconfont.ttf 字体文件目录地址 ” -o “ 创建图标字体地址 \my_font_icon_30.c” --bpp 4 --size 30 –r 0xe7e0,0xed6a

 

4.2、使用图标字体

① 在程序开始处申明字体,就可以在配置标签样式中设置使用字体

      LV_FONT_DECLARE(my_font_30); //申明字体

 

      //定义图标

      #define MY_ICON_WIFI "\xEE\x9F\xA0" // 图标

      #define MY_ICON_USB "\xEE\xB5\xAA" // 图标

 

      lv_style_set_text_font(&style_screen_label_1_main, LV_STATE_DEFAULT, & my_font_30);

 

② 而设置文本需要使用图标的编码调用,需要先将图标的 unicode 编码转换为 utf-8 编码,如在线转换网址: http://www.ltg.ed.ac.uk/~richard/utf-8.cgi



         

 
③ 在设置标签文本时使用图标的编码调用

      lv_label_set_text(ui->screen_label_1, "#6A2B00 "MY_ICON_BATTERY"##6A2B00 "MY_ICON_YUANGUANG"##6A2B00 "MY_ICON_ENGINE"#"); 

     图标字体显示

      

5、标签控件演示代码

void setup_scr_screen(lv_ui *ui)
{
//Write codes screen
ui->screen = lv_obj_create(NULL, NULL);

//Write codes screen_label_1
ui->screen_label_1 = lv_label_create(ui->screen, NULL);
lv_label_set_text(ui->screen_label_1, "文本的内容横向纵向扩展");
lv_label_set_long_mode(ui->screen_label_1, LV_LABEL_LONG_BREAK);
lv_label_set_align(ui->screen_label_1, LV_LABEL_ALIGN_CENTER);

//Write style LV_LABEL_PART_MAIN for screen_label_1
static lv_style_t style_screen_label_1_main;
lv_style_init(&style_screen_label_1_main);

//Write style state: LV_STATE_DEFAULT for style_screen_label_1_main
lv_style_set_radius(&style_screen_label_1_main, LV_STATE_DEFAULT, 0);
lv_style_set_bg_color(&style_screen_label_1_main, LV_STATE_DEFAULT, lv_color_make(0xff, 0xff, 0xff));
lv_style_set_bg_grad_color(&style_screen_label_1_main, LV_STATE_DEFAULT, lv_color_make(0xff, 0xff, 0xff));
lv_style_set_bg_grad_dir(&style_screen_label_1_main, LV_STATE_DEFAULT, LV_GRAD_DIR_VER);
lv_style_set_bg_opa(&style_screen_label_1_main, LV_STATE_DEFAULT, 160);
lv_style_set_text_color(&style_screen_label_1_main, LV_STATE_DEFAULT, lv_color_make(0x00, 0x00, 0x00));
lv_style_set_text_font(&style_screen_label_1_main, LV_STATE_DEFAULT, &lv_font_simsun_30);
lv_style_set_text_letter_space(&style_screen_label_1_main, LV_STATE_DEFAULT, 2);
lv_style_set_pad_left(&style_screen_label_1_main, LV_STATE_DEFAULT, 0);
lv_style_set_pad_right(&style_screen_label_1_main, LV_STATE_DEFAULT, 0);
lv_style_set_pad_top(&style_screen_label_1_main, LV_STATE_DEFAULT, 0);
lv_style_set_pad_bottom(&style_screen_label_1_main, LV_STATE_DEFAULT, 0);
lv_obj_add_style(ui->screen_label_1, LV_LABEL_PART_MAIN, &style_screen_label_1_main);
lv_obj_set_pos(ui->screen_label_1, 0, 173);
lv_obj_set_size(ui->screen_label_1, 720, 0);
}


6、参考资料


【LVGL 官方文档】

 

https://docs.lvgl.io/7.11/overview/object.html

【正点原子 手把手教你学 LittleVGL】

http://www.openedv.com/docs/book-videos/zdyzshipin/4free/littleVGL.html

【LVGL 官网】

https://lvgl.io/

★博文内容均由个人提供,与平台无关,如有违法或侵权,请与网站管理员联系。

★文明上网,请理性发言。内容一周内被举报5次,发文人进小黑屋喔~

评论