图层¶
创建顺序¶
默认情况下,LVGL 会将新对象绘制在旧对象的上方。
例如,假设我们向一个名为 button1 的父对象添加了一个按钮,然后再添加另一个名为 button2 的按钮。那么 button1(及其子对象)将位于背景中,并可能被 button2 及其子对象覆盖。

/*创建一个屏幕*/
lv_obj_t * scr = lv_obj_create(NULL, NULL);
lv_scr_load(scr); /*加载屏幕*/
/*创建两个按钮*/
lv_obj_t * btn1 = lv_btn_create(scr, NULL); /*在屏幕上创建一个按钮*/
lv_btn_set_fit(btn1, true, true); /*启用根据内容自动设置大小*/
lv_obj_set_pos(btn1, 60, 40); /*设置按钮的位置*/
lv_obj_t * btn2 = lv_btn_create(scr, btn1); /*复制第一个按钮*/
lv_obj_set_pos(btn2, 180, 80); /*设置按钮的位置*/
/*为按钮添加标签*/
lv_obj_t * label1 = lv_label_create(btn1, NULL); /*在第一个按钮上创建一个标签*/
lv_label_set_text(label1, "Button 1"); /*设置标签的文本*/
lv_obj_t * label2 = lv_label_create(btn2, NULL); /*在第二个按钮上创建一个标签*/
lv_label_set_text(label2, "Button 2"); /*设置标签的文本*/
/*删除第二个标签*/
lv_obj_del(label2);
移到前景¶
有四种显式方法可以将对象移到前景:
使用
lv_obj_move_foreground(obj)将对象移到前景。同样,使用lv_obj_move_background(obj)将其移到背景。使用
lv_obj_move_up(obj)将对象在层级中上移一个位置。同样,使用lv_obj_move_down(obj)将其下移一个位置。使用
lv_obj_swap(obj1, obj2)交换两个对象的相对层级位置。当使用
lv_obj_set_parent(obj, new_parent)时,obj将位于new_parent的前景。
顶层和系统层¶
LVGL 使用两个特殊的图层,分别是 layer_top 和 layer_sys。
这两个图层在显示器的所有屏幕上都是可见的,但它们不会在多个物理显示器之间共享。layer_top 始终位于默认屏幕(lv_scr_act())的顶部,而 layer_sys 位于 layer_top 的顶部。
layer_top 可供用户创建一些在任何地方都可见的内容。例如,菜单栏、弹出窗口等。如果启用了 click 属性,则 layer_top 会吸收所有用户点击并充当模态层。
lv_obj_add_flag(lv_layer_top(), LV_OBJ_FLAG_CLICKABLE);
layer_sys 在 LVGL 中也用于类似的目的。例如,它将鼠标光标放置在所有图层之上,以确保其始终可见。