开关 (lv_switch)

概述

开关看起来像一个小滑块,可以用来打开或关闭某些功能。

部件和样式

  • LV_PART_MAIN 开关的背景使用所有典型的背景样式属性。padding 会使指示器在相应方向上变小。

  • LV_PART_INDICATOR 显示开关当前状态的指示器。同样使用所有典型的背景样式属性。

  • LV_PART_KNOB 一个矩形(或圆形),绘制在指示器的左侧或右侧。同样使用所有典型的背景样式属性来描述旋钮。默认情况下,旋钮是正方形(可选的圆角),边长等于滑块较小的一侧。可以通过 padding 值使旋钮变大。padding 值也可以是非对称的。

用法

改变状态

开关使用标准的 LV_STATE_CHECKED 状态。

要获取开关的当前状态(true 表示开启),请使用 lv_obj_has_state(switch, LV_STATE_CHECKED)

调用 lv_obj_add_state(switch, LV_STATE_CHECKED) 将其打开,或调用 lv_obj_clear_state(switch, LV_STATE_CHECKED) 将其关闭。

事件

  • LV_EVENT_VALUE_CHANGED 当开关状态改变时发送。

也可以查看 基础对象 的事件。

了解更多关于 事件 的信息。

按键

  • LV_KEY_UP/RIGHT 打开滑块

  • LV_KEY_DOWN/LEFT 关闭滑块

  • LV_KEY_ENTER 切换开关

了解更多关于 按键 的信息。

示例

Simple Switch

C code  

 GitHub
#include "../../lv_examples.h"
#if LV_USE_SWITCH && LV_BUILD_EXAMPLES

static void event_handler(lv_event_t * e)
{
    lv_event_code_t code = lv_event_get_code(e);
    lv_obj_t * obj = lv_event_get_target(e);
    if(code == LV_EVENT_VALUE_CHANGED) {
        LV_LOG_USER("State: %s\n", lv_obj_has_state(obj, LV_STATE_CHECKED) ? "On" : "Off");
    }
}

void lv_example_switch_1(void)
{
    lv_obj_set_flex_flow(lv_scr_act(), LV_FLEX_FLOW_COLUMN);
    lv_obj_set_flex_align(lv_scr_act(), LV_FLEX_ALIGN_CENTER, LV_FLEX_ALIGN_CENTER, LV_FLEX_ALIGN_CENTER);

    lv_obj_t * sw;

    sw = lv_switch_create(lv_scr_act());
    lv_obj_add_event_cb(sw, event_handler, LV_EVENT_ALL, NULL);

    sw = lv_switch_create(lv_scr_act());
    lv_obj_add_state(sw, LV_STATE_CHECKED);
    lv_obj_add_event_cb(sw, event_handler, LV_EVENT_ALL, NULL);

    sw = lv_switch_create(lv_scr_act());
    lv_obj_add_state(sw, LV_STATE_DISABLED);
    lv_obj_add_event_cb(sw, event_handler, LV_EVENT_ALL, NULL);

    sw = lv_switch_create(lv_scr_act());
    lv_obj_add_state(sw, LV_STATE_CHECKED | LV_STATE_DISABLED);
    lv_obj_add_event_cb(sw, event_handler, LV_EVENT_ALL, NULL);
}

#endif

MicroPython code  

 GitHub Simulator
def event_handler(e):
    code = e.get_code()
    obj = e.get_target()
    if code == lv.EVENT.VALUE_CHANGED:
        if obj.has_state(lv.STATE.CHECKED):
            print("State: on")
        else:
            print("State: off")


lv.scr_act().set_flex_flow(lv.FLEX_FLOW.COLUMN)
lv.scr_act().set_flex_align(lv.FLEX_ALIGN.CENTER, lv.FLEX_ALIGN.CENTER, lv.FLEX_ALIGN.CENTER)

sw = lv.switch(lv.scr_act())
sw.add_event_cb(event_handler,lv.EVENT.ALL, None)

sw = lv.switch(lv.scr_act())
sw.add_state(lv.STATE.CHECKED)
sw.add_event_cb(event_handler, lv.EVENT.ALL, None)

sw = lv.switch(lv.scr_act())
sw.add_state(lv.STATE.DISABLED)
sw.add_event_cb(event_handler, lv.EVENT.ALL, None)

sw = lv.switch(lv.scr_act())
sw.add_state(lv.STATE.CHECKED | lv.STATE.DISABLED)
sw.add_event_cb(event_handler, lv.EVENT.ALL, None)


API

Functions

lv_obj_t *lv_switch_create(lv_obj_t *parent)

Create a switch object

Parameters

parent -- pointer to an object, it will be the parent of the new switch

Returns

pointer to the created switch

Variables

const lv_obj_class_t lv_switch_class
struct lv_switch_t

Public Members

lv_obj_t obj
int32_t anim_state