LVGL 具有图层(Layer)的概念,默认规则是最后创建的在最上层,一般我们都是使用在 lv_scr_act 层上面创建各种控件(widgets),每个控件其实就相当于一个个小小的图层展示在屏幕上。
在 lv_scr_act 之上还有另外两个层 top_layer 和 sys_layer,这是两个特殊的层。两者在显示器的所有屏幕上都是可见的和通用的。但是,它们不会在多个物理显示器之间共享。 top_layer 始终位于默认屏幕 (lv_scr_act()) 的顶部,而 sys_layer 位于 top_layer 的顶部。
用户可以使用 top_layer 来创建一些随处可见的内容。例如,一个菜单栏,一个弹出窗口等。如果启用了click属性,那么 top_layer 将吸收所有用户点击并充当模态。
sys_layer 在 LVGL 中也用于类似的目的。例如,它将鼠标光标放在所有图层上方以确保它始终可见。
sys_layer > top_layer > lv_scr_act
使用 LVGL 实现模式对话框的关键点就是利用 sys_layer 和 top_layer 的特点。也就是说创建对话框的时候在 sys_layer 和 top_layer 之上创建即可
- 无模式对话框:再 GUI 系统中,如果点击 button,并弹出一个对话框后,对话框停留在屏幕上,随时可用,并且屏幕后的其他组件依然处于可用状态,允许其他操作‘
- 模式对话框:点击 button 后,弹出对话框,必须响应了对话框后,其他组件才可用;