LVGL(lv_switch开关)
文章目录
- 🧩 一、`lv_switch` 是什么?
- ✨ 二、基本用法
- ✅ 1. 创建一个 switch
- ✅ 2. 设置/读取状态
- ✅ 3. 添加事件回调(监听状态切换)
- 🎨 三、自定义样式(可选)
- 🧪 四、完整示例
- 📌 五、常用 API 总结
- 📱 应用场景举例
当然可以!lv_switch
是 LVGL 中的开关组件,外观和手机中设置里的“开关”一样,用于表示“开 / 关”状态,适用于设置项的启用/禁用等场景。
🧩 一、lv_switch
是什么?
lv_switch
是 LVGL 提供的一种内置控件,表示二值状态(开/关),用户可以点击切换状态,通常用于设置界面或设备控制面板。
开关支持动画、样式自定义、状态读取/设置、事件监听等。
✨ 二、基本用法
✅ 1. 创建一个 switch
lv_obj_t * sw = lv_switch_create(lv_scr_act());
lv_obj_align(sw, LV_ALIGN_CENTER, 0, 0); // 居中
✅ 2. 设置/读取状态
// 设置为开(true)或关(false)
lv_obj_add_state(sw, LV_STATE_CHECKED); // 打开
lv_obj_clear_state(sw, LV_STATE_CHECKED); // 关闭// 获取当前状态(是否为打开)
bool is_on = lv_obj_has_state(sw, LV_STATE_CHECKED);
✅ 3. 添加事件回调(监听状态切换)
void switch_event_cb(lv_event_t * e) {lv_obj_t * sw = lv_event_get_target(e);if (lv_obj_has_state(sw, LV_STATE_CHECKED)) {printf("开关已打开\n");} else {printf("开关已关闭\n");}
}lv_obj_add_event_cb(sw, switch_event_cb, LV_EVENT_VALUE_CHANGED, NULL);
🎨 三、自定义样式(可选)
你可以通过 lv_obj_set_style_*()
改变开关颜色、大小等。例如:
// 改变开关背景颜色
lv_obj_set_style_bg_color(sw, lv_palette_main(LV_PALETTE_GREEN), LV_PART_INDICATOR);
你也可以设置
LV_PART_KNOB
(滑块部分)的样式。
🧪 四、完整示例
void create_switch_demo() {lv_obj_t * sw = lv_switch_create(lv_scr_act());lv_obj_align(sw, LV_ALIGN_CENTER, 0, 0);lv_obj_add_event_cb(sw, switch_event_cb, LV_EVENT_VALUE_CHANGED, NULL);
}
📌 五、常用 API 总结
功能 | API |
---|---|
创建开关 | lv_switch_create(parent) |
设置状态(打开) | lv_obj_add_state(sw, LV_STATE_CHECKED) |
设置状态(关闭) | lv_obj_clear_state(sw, LV_STATE_CHECKED) |
读取状态 | lv_obj_has_state(sw, LV_STATE_CHECKED) |
添加事件回调 | lv_obj_add_event_cb(sw, cb, LV_EVENT_VALUE_CHANGED, user_data) |
修改样式 | lv_obj_set_style_*() |
📱 应用场景举例
- 设置页面:“Wi-Fi 开关”、“蓝牙开关”
- IoT 控制面板:“灯光开关”、“加热器控制”
- 低功耗设备控制开关