以下是 LVGL 中这些枚举值的详细注释,按功能和场景分类说明:
状态枚举(State Flags)
作用:描述控件的交互状态(支持按位组合 OR
运算),用于动态样式控制。
常见场景:根据控件状态(如按下、聚焦)显示不同样式。
enum {
LV_STATE_DEFAULT = 0x0000, // 默认状态(未交互)
LV_STATE_CHECKED = 0x0001, // 控件已选中(如复选框勾选)
LV_STATE_FOCUSED = 0x0002, // 控件获得焦点(如通过键盘/按键导航)
LV_STATE_FOCUS_KEY = 0x0004, // 通过键盘/按键操作聚焦(与触摸操作区分)
LV_STATE_EDITED = 0x0008, // 控件正在被编辑(如输入框输入中)
LV_STATE_HOVERED = 0x0010, // 鼠标悬停状态(需启用悬停检测)
LV_STATE_PRESSED = 0x0020, // 控件被按下(触摸/点击中)
LV_STATE_SCROLLED = 0x0040, // 控件处于滚动状态(如列表滚动时)
LV_STATE_DISABLED = 0x0080, // 控件被禁用(不可交互)
// 用户自定义状态,用于扩展逻辑
LV_STATE_USER_1 = 0x1000, // 自定义状态 1
LV_STATE_USER_2 = 0x2000, // 自定义状态 2
LV_STATE_USER_3 = 0x4000, // 自定义状态 3
LV_STATE_USER_4 = 0x8000, // 自定义状态 4
LV_STATE_ANY = 0xFFFF, // 匹配所有状态(用于样式全局设置)
};
部件枚举(Widget Parts)
作用:定义控件的子组件(按位组合 OR
运算无效),用于精细化样式设计。
常见场景:为控件的不同部分(如滑块背景、旋钮)设置独立样式。
enum {
LV_PART_MAIN = 0x000000, // 主体部分(如背景、基础容器)
LV_PART_SCROLLBAR = 0x010000, // 滚动条组件
LV_PART_INDICATOR = 0x020000, // 指示器(如进度条、开关状态标志)
LV_PART_KNOB = 0x030000, // 可拖动的旋钮/滑块手柄
LV_PART_SELECTED = 0x040000, // 当前选中项(如列表高亮项)
LV_PART_ITEMS = 0x050000, // 子项容器(如表格单元格、菜单项)
LV_PART_TICKS = 0x060000, // 刻度线(如仪表盘、滑动条的刻度)
LV_PART_CURSOR = 0x070000, // 输入光标(如文本输入框的光标)
// 自定义部件起始点(开发者可扩展)
LV_PART_CUSTOM_FIRST = 0x080000, // 自定义部件的起始标识
LV_PART_ANY = 0x0F0000, // 匹配所有部件(用于全局样式设置)
};
关键设计逻辑
-
状态与部件的组合:
在 LVGL 样式中,通过状态 + 部件
的组合精准控制样式,例如:// 设置滑块旋钮在按下状态的样式 lv_style_set_bg_color(&style, LV_STATE_PRESSED | LV_PART_KNOB, LV_COLOR_RED);
-
位域设计:
- 状态值 (
0x0000~0x8000
) 占用低 16 位,部件值 (0x000000~0x0F0000
) 占用高 16 位,确保二者可组合使用。
- 状态值 (
-
自定义扩展:
- 使用
LV_STATE_USER_1~4
和LV_PART_CUSTOM_FIRST
实现自定义交互逻辑和复杂控件。
- 使用
示例场景
- 按钮按下效果:
为LV_PART_MAIN
的LV_STATE_PRESSED
状态设置背景色。 - 滚动条样式:
为LV_PART_SCROLLBAR
的LV_STATE_DEFAULT
状态设置宽度和颜色。 - 自定义旋钮:
通过LV_PART_CUSTOM_FIRST
定义新部件,并绑定专属样式。
通过这些枚举值,LVGL 实现了高度灵活的样式系统和交互状态管理。