《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 默认就是透明
浙公网安备 33010602011771号