LVGL(lv_checkbox复选框按键)
文章目录
- 🧩 一、`lv_checkbox` 是什么?
- ✅ 二、如何使用 `lv_checkbox`
- 1️⃣ 创建 checkbox
- 2️⃣ 设置或获取勾选状态
- 3️⃣ 添加事件回调
- 🧪 三、完整示例
- 🎨 四、样式自定义(可选)
- 📌 五、典型应用场景
- ⚠️ 六、注意事项
当然可以!lv_checkbox
是 LVGL 中的复选框控件,常用于表示“开 / 关”或“已选 / 未选”的状态,允许用户选择一个或多个选项。
🧩 一、lv_checkbox
是什么?
它是一个带文字的方形框,状态可以是:
- ✅ 已勾选
- ⬜ 未勾选
- 🛑 禁用状态(不能点)
通常用于设置选项、表单、条款同意等场景。
✅ 二、如何使用 lv_checkbox
1️⃣ 创建 checkbox
lv_obj_t * cb = lv_checkbox_create(lv_scr_act());
lv_checkbox_set_text(cb, "我已阅读并同意");
lv_obj_align(cb, LV_ALIGN_CENTER, 0, 0);
你也可以在创建时直接设置文本(从 v8.1 起):
lv_obj_t * cb = lv_checkbox_create(lv_scr_act());
lv_label_set_text(lv_obj_get_child(cb, 1), "同意条款");
2️⃣ 设置或获取勾选状态
// 设置勾选
lv_obj_add_state(cb, LV_STATE_CHECKED);// 清除勾选
lv_obj_clear_state(cb, LV_STATE_CHECKED);// 是否已勾选?
bool is_checked = lv_obj_has_state(cb, LV_STATE_CHECKED);
3️⃣ 添加事件回调
void checkbox_event_cb(lv_event_t * e) {lv_obj_t * cb = lv_event_get_target(e);bool checked = lv_obj_has_state(cb, LV_STATE_CHECKED);const char * txt = lv_label_get_text(lv_obj_get_child(cb, 1));printf("复选框【%s】现在是:%s\n", txt, checked ? "已勾选" : "未勾选");
}lv_obj_add_event_cb(cb, checkbox_event_cb, LV_EVENT_VALUE_CHANGED, NULL);
🧪 三、完整示例
void lv_example_checkbox() {lv_obj_t * cb1 = lv_checkbox_create(lv_scr_act());lv_checkbox_set_text(cb1, "我已阅读用户协议");lv_obj_align(cb1, LV_ALIGN_TOP_LEFT, 10, 10);lv_obj_add_event_cb(cb1, checkbox_event_cb, LV_EVENT_VALUE_CHANGED, NULL);lv_obj_t * cb2 = lv_checkbox_create(lv_scr_act());lv_checkbox_set_text(cb2, "订阅邮件");lv_obj_align(cb2, LV_ALIGN_TOP_LEFT, 10, 50);lv_obj_add_event_cb(cb2, checkbox_event_cb, LV_EVENT_VALUE_CHANGED, NULL);
}
🎨 四、样式自定义(可选)
你可以为复选框添加自定义颜色、边框等样式:
lv_obj_set_style_bg_color(cb1, lv_palette_main(LV_PALETTE_GREEN), LV_PART_INDICATOR);
lv_obj_set_style_text_color(cb1, lv_color_black(), 0);
也可以设置字体大小、对齐方式等。
📌 五、典型应用场景
场景 | 示例 |
---|---|
用户协议 | “我已阅读并同意…” |
设置选项 | “启动时自动登录” |
批量选择 | 文件列表中多选 |
表单 | “接收通知”、“隐藏密码” |
⚠️ 六、注意事项
lv_checkbox
只能显示一个方框和一段文字,不能像lv_list
那样显示复杂内容。- 不支持单独修改 icon(可以自定义绘图或重写样式实现)。