LVGL_基础控件Switch_Button
1、创建switch_button
c
/* 创建一个 switch 部件(对象) */
lv_obj_t * sw = lv_switch_create(lv_scr_act()); // 创建一个 switch 部件(对象),他的父对象是活动屏幕对象
lv_obj_center(sw); // 方法1:让对象居中,简洁
//lv_obj_align(sw, LV_ALIGN_CENTER, 0, 0); // 方法2:让对象居中,较为灵活
2、修改未选中背景颜色
c
lv_obj_set_style_bg_color(sw, lv_color_hex(0xc43e1c), LV_PART_MAIN);
3、修改盒子内颜色大小
c
lv_obj_set_style_pad_all(sw, 5, LV_PART_MAIN);
lv_obj_set_style_pad_left(sw, 10, LV_PART_MAIN);//只修改左侧
4、设置背景透明度和背景颜色
c
lv_obj_set_style_bg_opa(sw, 10, LV_PART_INDICATOR);
lv_obj_set_style_bg_color(sw, lv_color_hex(0xc43e1c), LV_PART_INDICATOR);
5、修改选中状态下的控件背景色
c
lv_obj_set_style_bg_color(sw, lv_color_hex(0x7719aa), LV_PART_INDICATOR | LV_STATE_CHECKED);
6、修改中间旋钮的颜色
c
lv_obj_set_style_bg_color(sw, lv_color_hex(0xc43e1c), LV_PART_KNOB);
7、修改控件大小
c
// 修改开关对象的大小,注意比例不能是 1:1 (比如:宽高都是100),否则只能看到一个大圆
lv_obj_set_size(sw, 200, 100);
8、默认让控件处于选中的状态
c
lv_obj_clear_state(sw, LV_STATE_CHECKED);// 关
lv_obj_add_state(sw, LV_STATE_CHECKED);// 开关默认处于关闭状态,这里设置为打开状态
9、让控件保持当前状态不允许更改
c
lv_obj_clear_state(sw, LV_STATE_CHECKED);// 关
lv_obj_add_state(sw, LV_STATE_DISABLED); // 当前状态是关,并且不可更改
c
lv_obj_add_state(sw, LV_STATE_CHECKED | LV_STATE_DISABLED); // 当前状态是开,并且不可更改
10、添加事件
c
// 添加事件,当我们点击开关,改变开关的状态时,会触发 LV_EVENT_VALUE_CHANGED 事件类型
// 当然我们可以处理他触发的其他事件类型,比如: LV_EVENT_CLICKED
lv_obj_add_event_cb(sw, sw_event_handler, LV_EVENT_VALUE_CHANGED, NULL);
static void sw_event_handler(lv_event_t * e)
{
lv_event_code_t code = lv_event_get_code(e);
lv_obj_t *sw = lv_event_get_target(e);
if (code == LV_EVENT_VALUE_CHANGED)
{
// 判断开关状态
/* 方式1 */
// 返回 bool 类型, 开-1 ; 关-2
//if(lv_obj_has_state(sw, LV_STATE_CHECKED))
// LV_LOG_USER("ON!");
//else
// LV_LOG_USER("OFF!");
// 更简介的写法
LV_LOG_USER("State: %s", lv_obj_has_state(sw, LV_STATE_CHECKED) ? "ON" : "OFF");
/* 方式2 */
//if(lv_obj_get_state(sw) & LV_STATE_CHECKED)
// LV_LOG_USER("ON!");
//else
// LV_LOG_USER("OFF!");
//LV_LOG_USER("State: %s", (lv_obj_get_state(sw) & LV_STATE_CHECKED) ? "ON" : "OFF");
}
}
11、清除禁用状态
c
// 清除禁用状态,一般由其他部件(外部)清除
lv_obj_clear_state(sw, LV_STATE_DISABLED); // 清除禁用状态,按钮可正常使用