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像素大小的蓝色字体。若屏幕宽度不足以容纳整行,第三行文本会自动折行显示。通过以下标准判定案例通过:
- 标签控件成功显示三行独立文本,行间有明显换行;
- 文字颜色为蓝色(RGB值约0x1E90FF),非默认黑色;
- 文字尺寸明显大于默认字体(默认通常为14px),与20px字号相符;
- 当窗口宽度小于280像素时,长行文本自动换行,无横向溢出。
验证要点
上图展示了标签控件在屏幕上的预期布局:虚线框内为标签控件区域,三行文本按顺序显示,第三行因宽度限制自动折为两段。实际运行时,可通过修改lv_obj_set_width的数值观察换行位置变化,或修改LABEL_TEXT_COLOR宏观察颜色变化,以确认样式设置生效。