3. 标签控件显示文本

标签控件显示文本 学习卡片

任务说明

本案例在LVGL中创建一个标签(lv_label)控件,使其显示多行文本,并设置字体大小与文字颜色。通过本案例掌握标签控件的基本创建、文本内容设置、长文本自动换行以及样式属性(字体、颜色)的配置方法。

实现方案

使用LVGL的标签控件API完成以下步骤:调用lv_label_create创建标签;通过lv_label_set_text设置包含换行符的多行文本;使用lv_label_set_long_mode设置为自动换行模式;通过lv_obj_set_style_text_font指定字体(使用LVGL内置的lv_font_montserrat_20),通过lv_obj_set_style_text_color设置文字颜色。代码在lv_example_label_1函数中实现,该函数由LVGL事件循环自动调用。

完整代码


#include "lvgl.h"

/* 字体大小与颜色宏定义 */
#define LABEL_FONT_SIZE  20
#define LABEL_TEXT_COLOR lv_color_hex(0x1E90FF)  /* 道奇蓝 */

void lv_example_label_1(void)
{
    /* 1. 创建标签控件 */
    lv_obj_t *label = lv_label_create(lv_scr_act());

    /* 2. 设置多行文本(\n为换行符) */
    lv_label_set_text(label,
        "LVGL Label Demo\n"
        "This is line 2.\n"
        "Line 3: font size 20, blue color.");

    /* 3. 设置长文本模式:自动换行(超出宽度时换行) */
    lv_label_set_long_mode(label, LV_LABEL_LONG_WRAP);

    /* 4. 设置标签宽度(配合WRAP模式实现自动换行) */
    lv_obj_set_width(label, 280);

    /* 5. 设置字体大小(使用内置20号字体) */
    lv_obj_set_style_text_font(label, &lv_font_montserrat_20, 0);

    /* 6. 设置文字颜色 */
    lv_obj_set_style_text_color(label, LABEL_TEXT_COLOR, 0);

    /* 7. 标签居中显示 */
    lv_obj_center(label);
}

/* 主函数:初始化LVGL并运行示例 */
int main(void)
{
    lv_init();

    /* 初始化显示驱动与输入驱动(具体实现依赖硬件平台) */
    /* display_init(); */
    /* indev_init();  */

    lv_example_label_1();

    while (1) {
        lv_timer_handler();  /* LVGL周期任务处理 */
        lv_delay_ms(5);
    }
}

关键实现说明

  • 多行文本:在lv_label_set_text的字符串中直接使用\n换行符,标签控件会按行显示。
  • 自动换行:设置LV_LABEL_LONG_WRAP模式后,当文本宽度超过标签宽度(此处设为280像素)时自动折行,避免文本被截断。
  • 字体大小:LVGL内置字体lv_font_montserrat_20对应20像素字号,通过样式属性LV_STYLE_TEXT_FONT应用。
  • 文字颜色:使用lv_obj_set_style_text_color将颜色设为道奇蓝(0x1E90FF),该API作用于标签的文本部分。

验证方法

在LVGL模拟器或真实硬件平台上编译运行本代码。预期观察结果:屏幕中央显示三行文本,第一行为“LVGL Label Demo”,第二行为“This is line 2.”,第三行为“Line 3: font size 20, blue color.”;所有文字均为20像素大小的蓝色字体。若屏幕宽度不足以容纳整行,第三行文本会自动折行显示。通过以下标准判定案例通过:

  1. 标签控件成功显示三行独立文本,行间有明显换行;
  2. 文字颜色为蓝色(RGB值约0x1E90FF),非默认黑色;
  3. 文字尺寸明显大于默认字体(默认通常为14px),与20px字号相符;
  4. 当窗口宽度小于280像素时,长行文本自动换行,无横向溢出。
LVGL Label Demo This is line 2. Line 3: font size 20, blue color. 标签控件边界 字体: Montserrat 20px 颜色: #1E90FF 宽度 280px(自动换行边界)

验证要点

上图展示了标签控件在屏幕上的预期布局:虚线框内为标签控件区域,三行文本按顺序显示,第三行因宽度限制自动折为两段。实际运行时,可通过修改lv_obj_set_width的数值观察换行位置变化,或修改LABEL_TEXT_COLOR宏观察颜色变化,以确认样式设置生效。