复选框(lv_cb)

概述

复选框(Checkbox)对象是从 Button 背景构建的,Button 背景还包含Button项目符号和 Label ,以实现经典的复选框。

零件和样式

该复选框的主要部分称为 LV_CHECKBOX_PART_BG 。它是“项目符号”及其旁边的文本的容器。背景使用所有典型的背景样式属性。

项目符号是真正的 基础对象(lv_obj) ,可以用 LV_CHECKBOX_PART_BULLET 引用。项目符号会自动继承背景状态。因此,背景被按下时,项目符号也会进入按下状态。项目符号还使用所有典型的背景样式属性。

标签没有专用部分。因为文本样式属性始终是继承的,所以可以在背景样式中设置其样式。

用法

文本

可以通过 lv_checkbox_set_text(cb, "New text") 函数修改文本。它将动态分配文本。

要设置静态文本,请使用 lv_checkbox_set_static_text(cb, txt) 。这样,将仅存储 txt 指针,并且在存在复选框时不应释放该指针。

选中/取消选中

可以通过 lv_checkbox_set_checked(cb, true/false) 手动选中/取消选中复选框。设置为 true 将选中该复选框,而设置为 false 将取消选中该复选框。

禁用复选框

要禁用复选框,调用 lv_checkbox_set_disabled(cb, true) .

获取/设置复选框状态

可以使用 lv_checkbox_get_state(cb) 函数获取Checkbox的当前状态,该函数返回当前状态。可以使用 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)检查状态,以忽略非活动复选框中的事件。

了解有关 事件 的更多内容。

按键

复选框可处理以下按键:

  • LV_KEY_RIGHT/UP - 如果启用了切换,则进入切换状态

  • LV_KEY_LEFT/DOWN - 如果启用了切换,则进入非切换状态

请注意,与往常一样,LV_K​​EY_ENTER的状态会转换为LV_EVENT_PRESSED / PRESSING / RELEASED等。

了解有关 按键 的更多内容。

范例

简单复选框

http://photos.100ask.net/lvgl/04_widgets/08_checkbox/lv_ex_checkbox_1.png

一个简单的复选框

上述效果的示例代码:

 1    #include "../../../lv_examples.h"
 2    #include <stdio.h>
 3    #if LV_USE_CHECKBOX
 4
 5    static void event_handler(lv_obj_t * obj, lv_event_t event)
 6    {
 7            if(event == LV_EVENT_VALUE_CHANGED) {
 8                    printf("State: %s\n", lv_checkbox_is_checked(obj) ? "Checked" : "Unchecked");
 9            }
10    }
11
12    void lv_ex_checkbox_1(void)
13    {
14            lv_obj_t * cb = lv_checkbox_create(lv_scr_act(), NULL);
15            lv_checkbox_set_text(cb, "I agree to terms and conditions.");
16            lv_obj_align(cb, NULL, LV_ALIGN_CENTER, 0, 0);
17            lv_obj_set_event_cb(cb, event_handler);
18    }
19
20    #endif

相关API

TODO