《lvgl基础学习 —— label》

1.lv_label

  lv_label是LVGL中用于“显示文本”的最基础控件。作用就是把字符串显示在屏幕上

在 LVGL 里:

lv_label = lv_obj + 文本能力

也就是说:

  • lv_label 本质仍然是一个 lv_obj

  • 所有 lv_obj_* API 都能用在 label 上

例如:
lv_obj_center(label);
lv_obj_set_width(label, 200);
lv_obj_set_style_text_color(label, lv_color_red(), 0);

 

label的最小使用步骤,使用 lv_label 永远是这套流程:

lv_obj_t *label = lv_label_create(parent);
lv_label_set_text(label, "Hello");
lv_obj_align(label, LV_ALIGN_CENTER, 0, 0);

拆解一下:

| 步骤                  | 含义                               
| ------------------- | -------------------------------- 
| `lv_label_create`   | 创建 label                         
| `parent`            | 放在哪(screen / button / container) 
| `lv_label_set_text` | 设置文本                             
| `lv_obj_align`      | 位置                               

 

demo:屏幕中间显示一行文字

#include "lvgl.h"

void ui_label_demo(void)
{
    lv_obj_t *label = lv_label_create(lv_scr_act());
    lv_label_set_text(label, "Hello LVGL!");
    lv_obj_center(label);
}

 

API说明:

lv_obj_t *label = lv_label_create(lv_scr_act());

  上面的label是直接显示在screen上。

 

label也可以放在btn上:

lv_obj_t *btn = lv_btn_create(lv_scr_act());
lv_obj_t *label = lv_label_create(btn);
lv_label_set_text(label, "OK");
lv_obj_center(label);

设置文本:

lv_label_set_text(label, "Text");

  内部会复制字符串,安全。

动态更新文本:

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

  显示数值时 必用

获取当前文本:

const char *txt = lv_label_get_text(label);

 

自动换行 & 宽度

label的默认行为:不会自动换行,文本一行显示。

开启自动换行:

lv_obj_set_width(label, 150);
lv_label_set_long_mode(label, LV_LABEL_LONG_WRAP);

demo:

lv_obj_t *label = lv_label_create(lv_scr_act());
lv_obj_set_width(label, 150);
lv_label_set_long_mode(label, LV_LABEL_LONG_WRAP);
lv_label_set_text(label, "This is a very very long text for LVGL label demo.");
lv_obj_center(label);

 

label的“长文本模式”

lv_label_set_long_mode(label, mode);
常用的 mode:

模式                           效果
LV_LABEL_LONG_WRAP             自动换行(最常用)
LV_LABEL_LONG_DOT              超出显示 ...
LV_LABEL_LONG_SCROLL           横向滚动
LV_LABEL_LONG_SCROLL_CIRCULAR  循环滚动

 

设置label的字体、颜色

设置颜色:
lv_obj_set_style_text_color(label, lv_color_hex(0xFF0000), 0);

设置字体:
LV_FONT_DECLARE(lv_font_montserrat_20);
lv_obj_set_style_text_font(label, &lv_font_montserrat_20, 0);

  字体必须在 lv_conf.h 里启用。

 

Demo:多行文本 + 居中 + 换行

void ui_label_demo(void)
{
    lv_obj_t *label = lv_label_create(lv_scr_act());

    lv_obj_set_width(label, 200);
    lv_label_set_long_mode(label, LV_LABEL_LONG_WRAP);

    lv_label_set_text(label,
        "LVGL Label Demo\n"
        "This text shows how label works.");

    lv_obj_align(label, LV_ALIGN_CENTER, 0, 0);
}

 

新手最常见的 6 个坑(重点)

❌ 1. 忘了 lv_timer_handler()

→ 不显示 / 不刷新


❌ 2. parent 传 NULL

→ 崩溃


❌ 3. 字体没开

→ 不显示文字


❌ 4. 想换行但没设 width

→ 不换行


❌ 5. 在中断 / 其他线程调用 lv_label_set_text

必炸(LVGL 非线程安全)


❌ 6. 想“透明背景”,却改错对象

→ label 默认就是透明

 

posted @ 2025-12-18 11:04  一个不知道干嘛的小萌新  阅读(2)  评论(0)    收藏  举报