| **银杏科技有限公司旗下技术文档发布平台** |||| |技术支持电话|**0379-69926675-801**||| |技术支持邮件|Gingko@vip.163.com||| ^ 版本 ^ 日期 ^ 作者 ^ 修改内容 ^ | V1.0 | 2020-12-3 | yang | 初次建立 | ===== 实验十三:lv_cb复选框 ===== ==== 一、复选框 ==== 复选框对象是以按钮的背景构建的,按钮背景还包含选择框和标签,以实现一个经典的复选框。 复选框的主要部分称为 **LV_CHECKBOX_PART_BG** 。它是选择框和标签的容器。背景使用所有典型的背景样式属性。 选择框是一个 lv_obj 对象,可以被 **LV_CHECKBOX_PART_BULLET** 刷新。选择框会自动继承背景的状态,因此,背景被按下时,选择框也会进入按下状态。 标签没有专用部分。由于文本样式属性也是继承背景的,因此可以在背景样式中设置其样式。 {{ :icore4t:icore4t_rtt_lvgl_13_1.gif?direct |}} void lv_gui_run(void){ lvgl2rtt_init("lcd"); /* 初始化lvgl2rtt */ lv_obj_t * cb = lv_checkbox_create(lv_scr_act(), NULL); lv_checkbox_set_text(cb, "this is a checkbox"); lv_obj_align(cb, NULL, LV_ALIGN_CENTER, 0, 0); } ==== 二、设置文本 ==== 用户可以通过函数 **lv_checkbox_set_text(cb, "New text")** 修改复选框文本,它将动态分配文本。 若要设置静态文本,请使用 **lv_checkbox_set_static_text(cb, txt)** 。这样,将仅存储文本的指针,并且复选框存在时LVGL不释放该指针。 ==== 三、选中 / 取消选中 ==== 用户可以通过函数 **lv_checkbox_set_checked(cb, true/false)** 手动选中/取消选中复选框。设置 **true** 将选中该复选框,而 **false** 将取消选中该复选框。 ==== 四、禁用复选框 ==== 要禁用复选框,请使用 **lv_checkbox_set_disabled(cb)** 。 ==== 五、获取 / 设置复选框状态 ==== 用户可以使用函数** lv_checkbox_get_state(cb)** 获取当前复选框的状态,也可以使用 **lv_checkbox_set_state(cb, state)** 设置复选框的当前状态。可用状态 **lv_btn_state_t** 有以下几种类型: * **LV_BTN_STATE_RELEASED** * **LV_BTN_STATE_PRESSED** * **LV_BTN_STATE_DISABLED** * **LV_BTN_STATE_CHECKED_RELEASED** * **LV_BTN_STATE_CHECKED_PRESSED** * **LV_BTN_STATE_CHECKED_DISABLED** === 六、事件 === 除了常规事件外,复选框还发送以下特殊事件: * **LV_EVENT_VALUE_CHANGED** - 切换复选框时发送。 请注意,在非活动状态下与通用输入设备相关的事件(如 **LV_EVENT_PRESSED** )也会被发送。因此用户需要通过 **lv_cb_is_inactive(cb)** 检查复选框状态,以忽略非活动复选框中的事件。 {{ :icore4t:icore4t_rtt_lvgl_13_2.gif?direct |}} static void event_handler(lv_obj_t * obj, lv_event_t event) /* 回调函数 */ { if(event == LV_EVENT_VALUE_CHANGED) { if(lv_checkbox_is_checked(obj) == true){ /* 判断状态 */ lv_label_set_text(label, "Checked"); /* 更新标签内容 */ }else{ lv_label_set_text(label, "Unchecked"); } } } void lv_gui_run(void){ lvgl2rtt_init("lcd"); /* 初始化lvgl2rtt */ lv_obj_t * cb = lv_checkbox_create(lv_scr_act(), NULL); /* 创建复选框 */ lv_checkbox_set_text(cb, "I agree to terms and conditions.");/* 设置复选框文本 */ lv_obj_align(cb, NULL, LV_ALIGN_CENTER, 0, 0); /* 设置复选框位置 */ lv_obj_set_event_cb(cb, event_handler); /* 设置复选框回调函数 */ label = lv_label_create(lv_scr_act(), NULL); /* 创建标签 */ lv_label_set_text(label, "Unchecked"); lv_obj_align(label, NULL, LV_ALIGN_CENTER, 0, 30); }