2. 屏幕初始化与背景色设置
任务说明
本案例要求在嵌入式环境中完成LVGL的初始化,并将默认屏幕的背景色设置为自定义颜色(例如深蓝色 #1E3A5F)。通过该过程理解LVGL中屏幕(lv_obj)与样式(lv_style_t)的基本关系:屏幕本身也是一个对象,可以通过样式修改其背景属性。
实现原理
LVGL中所有控件均为对象,默认屏幕由 lv_scr_act() 获取。修改背景色有两种方式:直接设置对象属性(简单但不推荐用于复杂界面),或创建样式并添加到屏幕对象(推荐方式,便于复用与维护)。本案例采用样式方式,演示 lv_style_set_bg_color() 与 lv_obj_add_style() 的核心用法。
代码实现
// main.c — LVGL屏幕初始化与背景色设置示例
#include "lvgl.h"
/* 自定义背景色:深蓝色 */
#define MY_BG_COLOR lv_color_hex(0x1E3A5F)
static lv_style_t bg_style; /* 屏幕样式 */
void screen_bg_demo(void)
{
/* 1. 初始化屏幕样式 */
lv_style_init(&bg_style);
lv_style_set_bg_color(&bg_style, MY_BG_COLOR);
lv_style_set_bg_opa(&bg_style, LV_OPA_COVER); /* 完全不透明 */
/* 2. 获取当前活动屏幕对象 */
lv_obj_t *scr = lv_scr_act();
/* 3. 将样式添加到屏幕(第一个样式,优先级最低) */
lv_obj_add_style(scr, &bg_style, 0);
/* 4. 可选:在屏幕上放置一个标签用于视觉确认 */
lv_obj_t *label = lv_label_create(scr);
lv_label_set_text(label, "BG: #1E3A5F");
lv_obj_center(label);
}
/* LVGL初始化后调用本函数即可 */
void lv_demo_init(void)
{
lv_init(); /* LVGL核心初始化 */
screen_bg_demo(); /* 设置屏幕背景 */
}
关键说明
lv_style_set_bg_opa()必须设置为LV_OPA_COVER,否则背景色可能因默认透明值而不可见。- 样式添加时的
selector参数(此处为0)表示该样式作用于对象的默认状态,不影响后续局部状态覆盖。 - 若需修改颜色,仅需更改
MY_BG_COLOR宏定义即可,无需改动其他代码。
SVG:屏幕对象与样式关系示意
编译与运行
- 确保LVGL库已正确移植到目标平台(如STM32、模拟器等),并完成显示驱动与输入设备注册。
- 在LVGL初始化完成后调用
lv_demo_init()。 - 编译并烧录程序,观察屏幕是否显示为深蓝色背景,中央显示白色文字
BG: #1E3A5F。
验证方法
判定标准:屏幕实际显示颜色与 MY_BG_COLOR 定义一致(肉眼观察或通过屏幕截图比对RGB值),且中央标签文字清晰可见。若背景未变化,请检查:
lv_style_set_bg_opa()是否设置为LV_OPA_COVER;- 样式是否成功添加到当前活动屏幕(而非其他对象);
- LVGL的
lv_init()是否在设置背景之前调用。
修改 MY_BG_COLOR 宏为其他颜色值(如 0x2E8B57 海绿色)并重新编译,屏幕背景应随之变化,以此验证样式与屏幕对象的绑定关系正确。