ITPub博客

首页 > 嵌入式/内核开发 > 嵌入式/内核开发 > 《LVGL开发指南 V1.0(G4电机开发板专用)》第十四章 标签部件(lv_label)

《LVGL开发指南 V1.0(G4电机开发板专用)》第十四章 标签部件(lv_label)

原创 嵌入式/内核开发 作者:正点原子 时间:2026-06-02 09:59:37 0 删除 编辑

第十四章 标签部件(lv_label)


       在LVGL中,标签部件常用于文本显示,例如标题、提示文本等。

       本章节将分为以下几个小节:

       14.1 标签部件的组成

       14.2 标签部件的相关知识

       14.3 标签部件的API函数

       14.4 标签部件的实验


        14.1 标签部件的组成

       标签部件由三个部分组成:主体背景、滚动条和所选文本,示意图如下:


图14.1.1 标签部件组成部分


       各组成部分的相关枚举如下所示:

       ① 主体背景LV_PART_MAIN;

       ② 滚动条LV_PART_SCROLLBAR;

       ③ 所选文本LV_PART_SELECTED。

       关于部件样式设置的内容,请大家参考6.4.4章节。


        14.2 标签部件的相关知识


       14.2.1文本设置

       设置标签部件文本的方法有三种:

       第一种:调用lv_label_set_text函数

       该函数是最常用的标签文本设置函数,它存储文本的内存由动态内存分配的。

       第二种:调用lv_label_set_text_fmt函数

       该函数与C语言的sprintf输出函数类似,都可以设置“式样化字符串”和“参数表”,示例代码如下:

lv_label_set_text_fmt(label, "Value: %d", 15);

        第三种:调用label_set_text_static函数

       该函数可以设置静态文本,该文本不存储在动态内存中,而是直接使用指定的缓冲区,此时,如果使用数组设置文本,则该数组不能是局部变量。


       14.2.2 换行符设置

       如果用户想把文本分为两段进行显示,则可在内容的末尾添加“\n”,其后续的文本将会换行。 

       接下来,我们以简单示例来理解标签换行的设置,示例代码如下所示:

void lv_mainstart(void)
{
    lv_obj_t* lv_label1 = lv_label_create(lv_scr_act());
    lv_label_set_text(lv_label1, "ALIENTEK \nLVGL \nDemo text");
 
    lv_obj_t* lv_label2 = lv_label_create(lv_scr_act());
lv_obj_align_to(lv_label2, lv_label1,LV_ALIGN_OUT_BOTTOM_MID,0,0); 
/* 设置标签文本及偏移 */
    lv_label_set_text_fmt(lv_label2, "Label value %d", 20);
}

       在上述源码中,我们创建了两个标签部件,label1部件调用lv_label_set_text函数设置文本,并使用“\n”进行换行,而label2部件调用lv_label_set_text_fmt函数设置文本。示例代码可以在PC模拟器中运行,效果图如下所示:


图14.2.2.1 标签部件文本换行


       14.2.3 文本长模式

       默认情况下,标签部件的宽度和高度都会根据文本的大小来动态变化。如果用户固定了标签部件的大小,并且文本的长度超过了部件的长度,则可以使用以下几个长文本模式来选择文本展现的形式:

       ① LV_LABEL_LONG_WRAP(默认):如果标签部件的高度是LV_SIZE_CONTENT,则该部件高度将被扩展,否则文本将被剪切。

       ② LV_LABEL_LONG_DOT:将标签文本右下角的最后3个字符替换为点。

       ③ LV_LABEL_LONG_SCROLL:来回滚动。如果文本比标签部件宽,则往水平方向滚动。如果文本比标签部件高,则往垂直方向滚动。注意:文本只会往一个方向滚动,水平方向具有更高的优先级。

       ④ LV_LABEL_LONG_SCROLL_CIRCULAR:循环滚动。如果文本比标签部件宽,则往水平方向滚动。如果文本比标签部件高,则往垂直方向滚动。注意:文本只会往一个方向滚动,水平方向具有更高的优先级。

       ⑤  LV_LABEL_LONG_CLIP:直接裁剪标签部件外面的文本。

       用户需要设置长文本模式,可调用lv_label_set_long_mode函数。


       14.2.4 文本着色

       用户需要让标签文本着色,可以调用lv_label_set_recolor函数。接下来,我们以简单示例来理解标签文本着色,示例代码如下所示:

void lv_mainstart(void)
{
    lv_obj_t* lv_label1 = lv_label_create(lv_scr_act());
lv_label_set_text(lv_label1, "ALIENTEK #ff0000 LVGL# Demo text");
/* 使能重新着色 */
    lv_label_set_recolor(lv_label1,true);
}

       在上述源码中,我们创建了一个标签部件,然后设置文本中的“LVGL”字符串颜色为红色(ff00000),最后使能文本重新着色功能。注意:用户需要设置标签文本着色,必须按以下格式设置文本:#颜色 文本#。示例代码可以在PC模拟器中运行,效果图如下所示:


图14.2.4.1设置文本颜色


        14.3 标签部件的API函数

       LVGL官方提供了一些与标签部件相关API,如下表所示:


表14.3.1 标签部件相关的API函数


       接下来,我们介绍LVGL标签部件常用的API函数:

       1. lv_label_create函数

       创建标签部件,该函数原型如下所示:

lv_obj_t *lv_label_create(lv_obj_t *parent);

       该函数的形参,如表14.3.2所示:


表14.3.2 lv_label_create函数形参描述


       返回值:无

       2. lv_label_set_text函数

       设置文本(动态),该函数原型如下所示:

void lv_label_set_text(lv_obj_t *obj, const char *text);

       该函数的形参,如表14.3.3所示:


表14.3.3 lv_label_set_text函数形参描述


       返回值:无

       3. lv_label_set_text_fmt函数

       设置格式化文本,该函数原型如下所示:

void lv_label_set_text_fmt(lv_obj_t *obj, const char *fmt, ...);

       该函数的形参,如表14.3.4所示:


表14.3.4 lv_label_set_text_fmt函数形参描述


       返回值:无

       4. lv_label_set_long_mode函数

       设置长文本模式,该函数原型如下所示:

void lv_label_set_long_mode(lv_obj_t *obj, lv_label_long_mode_t long_mode);

       该函数的形参,如表14.3.5所示:


表14.3.5 lv_label_set_long_mode函数形参描述


       返回值:无

       5. lv_label_set_recolor函数

       设置文本重新着色,该函数原型如下所示:

void lv_label_set_recolor(lv_obj_t *obj, bool en);

       该函数的形参,如表14.3.6所示:


表14.3.6 lv_label_set_recolor函数形参描述


       返回值:无


        14.4 标签部件的实验


       14.4.1 硬件设计


       1. 例程功能

       本实验主要测试标签部件API函数的使用,实验现象:开机后,屏幕上显示一行滚动的文本,其同时带有重着色的效果。与此同时,LED0闪烁,提示系统正在运行。

       该实验的完整源码,请参考《LVGL例程11 lv_label(标签)》例程,路径:A盘→4,程序源码 →3,扩展例程 →3,LVGL例程。


       14.4.2 软件设计


       14.4.2.1 程序流程图

       本实验的程序流程图,如下图14.4.2.1.1所示:


图14.4.2.1.1 标签部件实验流程图


       14.4.2.2 程序解析

       关于LVGL的用户代码,我们都是在lv_mainstart.c文件中编写的,本实验的源码如下所示:

/**************************** 第一部分 开始 ****************************/
/**
 * @brief  LVGL演示
 * @param  无
 * @return 无
 */
void lv_mainstart(void)
{
    lv_example_label();
}
 
/**************************** 第一部分 结束 ****************************/
/**************************** 第二部分 开始 ****************************/
/**
 * @brief  标签示例
 * @param  无
 * @return 无
 */
static void lv_example_label(void)
{
/* 定义并创建标签 */
lv_obj_t* label = lv_label_create(lv_scr_act());  
/* 设置标签文本 */
lv_label_set_text(label, "It is a circularly #ff0000 scrolling text.#"); 
/* 设置标签文本字体 */
lv_obj_set_style_text_font(label, &lv_font_montserrat_22, LV_PART_MAIN); 
/* 启用标签文本重新着色 */
lv_label_set_recolor(label, true); 
/* 设置标签宽度 */
lv_obj_set_width(label, 210);   
/* 设置标签长模式:循环滚动 */
lv_label_set_long_mode(label, LV_LABEL_LONG_SCROLL_CIRCULAR);  
/* 设置标签位置 */
    lv_obj_align(label, LV_ALIGN_CENTER, 0, 0); 
}
/**************************** 第二部分 结束 ****************************/

       上述源码可分为以下两个部分:

       ① lv_mainstart接口函数。在该函数中,我们调用了标签部件相关的示例函数;

       ② 我们在lv_example_label函数中设置标签部件的文本重新着色、长文本模式。


       14.4 . 3 下载验证

       把工程编译并下载到我们的开发板中, 运行效果如图14.4.3.1所示:


图14.4.3.1 标签部件实验

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70040860/viewspace-3172810/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2024-08-30

  • 博文量
    588
  • 访问量
    763892