LVGL v8 选择列表(Select)
lvsf_select 是 SiFli 的自定义选择列表控件,每一行在选中时显示”选中”图标、否则显示”未选中”图标。单选模式下同时只有一行被选中(radio 风格),多选模式下可同时选中多行(checkbox 风格)。点击某一行即把选中态移到该行,应用再读回用户的选择。
主要头文件:middleware/lvgl/lvsf/gui_widgets/lvsf_select.h
依赖控件:LVGL button / label / img(
LV_USE_BTN、LV_USE_LABEL、LV_USE_IMG)示例工程:example/multimedia/lvgl/lvgl_v8_select
功能简介
支持单选(
LV_SELECT_TYPE_SINGLE)和多选(LV_SELECT_TYPE_MULTI)两种模式。每行元素独立维护状态:未选中、选中、禁用。
可配置选中/未选中图标源,元素数量与元素尺寸。
行点击会冒泡到 select,内置点击回调会移动单选选中态。
支持通过接口读回当前选中索引或逐行查询选中状态。
使用场景
设置菜单中的单选/多选列表(如选项 A/B/C)。
单选框、复选框组。
需要自定义选中/未选中图标的条目列表。
支持的开发板
sf32lb52-lcd_n16r8
sf32lb52-lchspi-ulp
配置与初始化
lvsf_select 依赖 LVGL button、label、img 组件。在 menuconfig 中确认已开启:
CONFIG_LV_USE_BTN=y
CONFIG_LV_USE_LABEL=y
CONFIG_LV_USE_IMG=y
BSP 中通过 LVSF_USE_SELECT 宏控制该控件的编译。
创建对象的最小流程:
#include "lvsf_select.h"
lv_obj_t *sel = lv_select_create(lv_scr_act());
API 说明
枚举与常量
类型 |
取值 |
说明 |
|---|---|---|
|
|
单选模式 |
|
多选模式 |
|
|
|
未选中状态 |
|
选中状态 |
|
|
禁用状态 |
|
宏 |
|
元素间距(4) |
接口函数
接口函数 |
功能说明 |
参数/返回值说明 |
|---|---|---|
|
创建选择控件 |
|
|
设置选择类型 |
|
|
设置元素数量 |
|
|
设置元素大小 |
|
|
设置元素状态 |
|
|
设置选中图标源 |
|
|
设置未选中图标源 |
|
|
获取当前选中索引 |
单选模式下返回当前选中行 |
|
获取指定索引的元素对象 |
|
|
获取元素的索引 |
|
|
获取元素数量 |
返回元素数量 |
|
获取指定元素状态 |
|
典型用法
#include "lvsf_select.h"
lv_obj_t *sel = lv_select_create(parent);
lv_obj_add_flag(sel, LV_OBJ_FLAG_CLICKABLE); /* 构造会清掉,点击需要它 */
lv_select_set_type(sel, LV_SELECT_TYPE_SINGLE); /* 单选 */
lv_select_set_ele_num(sel, 3); /* 行数 */
lv_select_set_ele_size(sel, 220, 40); /* 每行尺寸 */
lv_select_set_check_src(sel, &check_img_dsc); /* 选中图标 */
lv_select_set_uncheck_src(sel, &uncheck_img_dsc); /* 未选中图标 */
lv_select_set_ele_state(sel, 0, LV_SELECT_STATE_CHECK); /* 第 0 行初始选中 */
/* 读回用户选择(行点击会冒泡到 select): */
uint16_t idx = lv_select_get_select_idx(sel); /* 单选:当前选中行 */
/* 多选时逐行查:lv_select_get_ele_state(sel, i) == LV_SELECT_STATE_CHECK */
在 select 上挂 LV_EVENT_SHORT_CLICKED 回调即可读回用户最新选择:
static void sel_changed_cb(lv_event_t *e)
{
lv_obj_t *sel = (lv_obj_t *)lv_event_get_user_data(e);
uint16_t idx = lv_select_get_select_idx(sel);
/* 根据 idx 更新 UI */
}
lv_obj_add_event_cb(sel, sel_changed_cb, LV_EVENT_SHORT_CLICKED, sel);
警告
lv_select_create() 构造时会清掉自身的 LV_OBJ_FLAG_CLICKABLE,需重新 lv_obj_add_flag(sel, LV_OBJ_FLAG_CLICKABLE),点击才能下达到各行。
效果展示
运行 lvgl_v8_select example 可查看实际效果:屏幕中央有 3 行条目(Option A/B/C),每行右侧一个小图标,第一行绿色(选中),另外两行深色(未选中);下方一行 Selected: Option A 显示当前选择。点击其它行,绿色”选中”图标移到被点行,Selected: 文字实时更新。
参考文档
源码路径:
middleware/lvgl/lvsf/gui_widgets/lvsf_select.h示例路径:
example/multimedia/lvgl/lvgl_v8_select