部件

小部件由一个或多个部件构成。例如,一个按钮只有一个部件,称为 LV_PART_MAIN。然而,一个 Slider (滑动条)(lv_slider) 有 LV_PART_MAINLV_PART_INDICATOR和 LV_PART_KNOB

状态

小部件可以处于以下状态的组合中:

  • LV_STATE_DEFAULT 正常,释放状态
  • LV_STATE_CHECKED: 切换或选中状态
  • LV_STATE_FOCUSED: 通过键盘或编码器聚焦或通过触摸板/鼠标点击
  • LV_STATE_FOCUS_KEY: 通过键盘或编码器聚焦,但不通过触摸板/鼠标
  • LV_STATE_EDITED: 通过编码器编辑
  • LV_STATE_HOVERED: 被鼠标悬停
  • LV_STATE_PRESSED: 正在被按下
  • LV_STATE_SCROLLED: 正在滚动
  • LV_STATE_DISABLED: 禁用

查看小部件状态

如果处于某种状态,会返回true

lv_obj_has_state(widget, LV_STATE_...)

添加或移除状态

lv_obj_add_state(widget, LV_STATE_...);
lv_obj_remove_state(widget, LV_STATE_...);

使用定时器3s后重置按钮状态

static void time_cb(lv_timer_t * timer)
{
    lv_obj_t * w = (lv_obj_t *)timer->user_data;
    lv_obj_clear_state(w, LV_STATE_PRESSED);
}
void lv_demo_widget_part_states(void)
{
    lv_obj_t * base_widget = lv_scr_act();
    lv_obj_t * btn = lv_btn_create(base_widget);
    lv_obj_set_size(btn, 100, 50);
    lv_obj_center(btn);
    // lv_obj_set_align(btn, LV_ALIGN_CENTER);
    lv_obj_add_state(btn, LV_STATE_PRESSED);//按钮按下状态
    
    lv_timer_create(time_cb, 3000, btn);
}