LVGL主要概念
1. Screen (屏幕):
概念 : 屏幕是 LVGL 应用程序中的顶层容器。它是用户界面的根对象,所有的可见 UI 元素最终都会添加到某个屏幕上(通常是活动屏幕)。
功能 :
作为其他 UI 元素的父对象。
可以拥有自己的背景颜色、背景图片等样式。
LVGL 可以管理多个屏幕,但在任何给定时刻只有一个屏幕是"活动的"并显示给用户。
可以通过函数如 lv_scr_load()
或lv_scr_load_anim()
来加载和切换不同的屏幕。
可以使用lv_screen_active()
获取当前活动屏幕的指针。
本质 : 屏幕本身也是一个lv_obj_t
对象,只是它是最顶层的,没有父对象(除了内部的显示驱动器)。
2. Widgets (小部件):
概念 : 小部件是预先构建的可交互或信息展示的 UI 组件,是构建用户界面的基本 building blocks。
功能 :
提供各种常见的 UI 元素,例如按钮 (Button)、标签 (Label)、滑块 (Slider)、开关 (Switch)、图表 (Chart)、列表 (List)、选项卡视图 (Tabview)、仪表盘 (Gauge) 等等。
每个小部件都封装了特定的功能和视觉表现。
可以通过 API 函数来创建、配置和控制小部件的行为和外观。
可以响应用户输入(通过 Events)。
可以通过 Styles 进行定制。
本质: 每个小部件都是由一个或多个底层的 LVGL 对象(lv_obj_t)组合而成,并提供了特定的 API 来简化其使用。
3. Events (事件):
概念 : 事件是发生在 UI 对象上的动作或状态改变,例如用户的点击、滑动、值改变,或者对象自身的创建、删除、尺寸改变等。
功能 :
允许应用程序响应用户的交互和 UI 的状态变化。
可以通过为对象注册事件回调函数来处理特定的事件。
LVGL 定义了丰富的事件类型(例如
LV_EVENT_CLICKED
,
LV_EVENT_VALUE_CHANGED
,
LV_EVENT_DRAW_MAIN
,
LV_EVENT_DELETE
等)。
一个对象可以注册多个事件回调函数来处理不同的事件。
事件回调函数可以接收事件发生的对象、事件代码以及用户自定义的数据作为参数。
本质: LVGL 内部维护着一套事件管理机制,当特定事件发生时,它会遍历注册到该对象上的回调函数并执行它们。
4. Parts (部件):
概念 : 许多 LVGL 小部件并非单一的视觉元素,而是由多个可独立样式化的"部件"组成。
功能 :
允许对小部件的不同视觉组成部分进行精细的样式控制。
例如,按钮可能包含一个主背景部件 (LV_PART_MAIN) 和一个按下时的效果部件 (LV_PART_PRESSED)。滑块可能包含一个背景 (LV_PART_MAIN)、一个指示器 (LV_PART_INDICATOR) 和一个旋钮 (LV_PART_KNOB)。
在设置样式时,可以指定要应用样式的部件。
通过 lv_obj_get_part() 等函数可以访问小部件的特定部件。
本质: 部件是小部件内部组织结构的一种逻辑划分,每个部件仍然是一个 lv_obj_t 对象或其概念上的组成部分。
5. States (状态):
概念 : UI 对象可以处于不同的状态,这些状态会影响其视觉外观和行为。
功能 :
LVGL 定义了多种内置状态(例如 LV_STATE_DEFAULT
(默认), LV_STATE_PRESSED
(按下), LV_STATE_FOCUSED
(聚焦), LV_STATE_EDITED
(编辑), LV_STATE_DISABLED
(禁用), LV_STATE_CHECKED
(选中) 等)。
一个对象可以同时处于多个状态(例如,一个被禁用的按钮也可能被按下)。
样式可以根据对象的状态进行定制,使得对象在不同交互阶段呈现不同的外观(例如,按下按钮时颜色变深)。
在设置样式时,可以使用状态标志来指定样式只在特定状态下生效。
本质 : 对象内部维护着一个状态标志位,当对象的交互或属性发生变化时,这个标志位会被更新。
6. Styles (样式):
概念 : 样式定义了 UI 对象的外观属性,例如背景颜色、边框宽度、字体、文本颜色、内边距、外边距、圆角等等。
功能 :
允许开发者定制 UI 元素的外观。
样式是可重用的,可以应用到多个对象或对象的不同部件和状态。
可以创建和修改样式对象 (lv_style_t)。
可以使用 lv_style_set_... 系列函数设置样式的各种属性。
可以使用 lv_obj_add_style() 将一个或多个样式应用到一个对象上,并可以指定应用的部件和状态。
样式可以层叠,后添加的样式会覆盖之前添加的相同属性。
本质: 样式存储在一个 lv_style_t 结构体中,包含了各种视觉属性的值。
7. Themes (主题):
概念 : 主题是一组预定义的样式集合,旨在为应用程序提供一致的视觉风格。
功能 :
提供了一种快速且简单的方式来为整个应用程序设置统一的外观。
LVGL 内置了多个主题(例如默认主题、蒙特塞拉特主题等),并且也支持自定义主题。
主题通常会为各种常用的小部件定义好在不同状态下的默认样式。
可以通过 lv_theme_set_act() 函数来激活一个主题。
即使使用了主题,仍然可以针对特定的对象或部件添加或修改自定义样式,以实现更精细的控制。
本质: 主题通常是一个初始化函数,它会创建一系列预定义的 lv_style_t 对象,并在创建小部件时默认应用这些样式。