lv_btn
lv_btn按钮其实是lv_cont的复杂变体,可以包含子对象,常见的子对象是lv_label标签,相关API在lv_btn.h
,lv_btn有6种状态
/** Possible states of a button.
* It can be used not only by buttons but other button-like objects too*/
enum {
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_BTN_STATE_LAST, /* Number of states*/
};
typedef uint8_t lv_btn_state_t;
状态变化
非切换按钮
LV_BTN_STATE_RELEASED-->LV_BTN_STATE_PRESSED-->LV_BTN_STATE_RELEASED
切换按钮
第一次点击时
LV_BTN_STATE_CHECKED_RELEASED-->LV_BTN_STATE_CHECKED_PRESSED-->LV_BTN_STATE_RELEASED
第二次点击
LV_BTN_STATE_RELEASED-->LV_BTN_STATE_PRESSED-->LV_BTN_STATE_CHECKED_RELEASED
布局和自适应
因为本质是lv_cont,所以layout和fit类型和lv_cont一致
样式
/**Styles*/
enum {
LV_BTN_PART_MAIN = LV_OBJ_PART_MAIN,
_LV_BTN_PART_VIRTUAL_LAST,
_LV_BTN_PART_REAL_LAST = _LV_OBJ_PART_REAL_LAST,
};
typedef uint8_t lv_btn_part_t;
例子
static void event_handler(lv_obj_t * obj, lv_event_t event)
{
if(event == LV_EVENT_CLICKED) {
printf("Clicked\n");
}
else if(event == LV_EVENT_VALUE_CHANGED) {
printf("Toggled\n");
}printf("%x,:%d\n", obj, lv_btn_get_state(obj));
}
void lv_ex_btn_1(void)
{
lv_obj_t * label;
lv_obj_t * btn1 = lv_btn_create(lv_scr_act(), NULL);/*创建btn1*/
lv_obj_set_event_cb(btn1, event_handler);/*设置btn1回调函数*/
lv_obj_align(btn1, NULL, LV_ALIGN_CENTER, 0, -40);
label = lv_label_create(btn1, NULL);/*btn1内创建label*/
lv_label_set_text(label, "Button");
printf("%x,btn1:%d\n", btn1,lv_btn_get_state(btn1));
lv_obj_t * btn2 = lv_btn_create(lv_scr_act(), NULL);/*创建btn2*/
lv_obj_set_event_cb(btn2, event_handler);/*设置btn2回调函数*/
lv_obj_align(btn2, NULL, LV_ALIGN_CENTER, 0, 40);
lv_btn_set_checkable(btn2, true);/*设置为toggle形按钮*/
lv_btn_toggle(btn2);/*切换按钮状态*/
lv_btn_set_fit2(btn2, LV_FIT_NONE, LV_FIT_TIGHT);/*设置按钮自适应模式*/
label = lv_label_create(btn2, NULL);/*btn2内创建label*/
lv_label_set_text(label, "Toggled");
printf("%x,btn2:%d\n", btn2, lv_btn_get_state(btn2));
}