LVGL(lv_btn按键类)
文章目录
- 一、基本概念
- 继承结构:
- 二、创建一个按钮的基本流程
- 三、响应按钮事件
- 四、自定义按钮外观
- 五、按钮类型(模式)
- 六、综合示例
- 七、按钮和输入设备的关系
lv_btn
是 LVGL(Light and Versatile Graphics Library)中最常用的控件之一,用于创建按钮(Button)。它是 lv_obj
的子类,继承了对象的一切特性,并在此基础上提供了更多交互性,比如点击、按下、释放等事件响应。
一、基本概念
在 LVGL 中,按钮本质上就是一个可响应事件的容器,你可以在按钮里放入 标签(lv_label
)、图标、动画元素等。
继承结构:
lv_obj└── lv_btn
二、创建一个按钮的基本流程
lv_obj_t *btn = lv_btn_create(lv_scr_act()); // 在当前屏幕创建按钮
lv_obj_align(btn, LV_ALIGN_CENTER, 0, 0); // 居中显示// 给按钮添加一个标签
lv_obj_t *label = lv_label_create(btn);
lv_label_set_text(label, "点击我");
三、响应按钮事件
按钮的主要特点是响应用户的触控操作,比如“按下”、“释放”、“长按”等。可以通过注册事件回调函数处理:
void btn_event_cb(lv_event_t * e)
{lv_event_code_t code = lv_event_get_code(e);if(code == LV_EVENT_CLICKED) {printf("按钮被点击了!\n");}
}lv_obj_add_event_cb(btn, btn_event_cb, LV_EVENT_ALL, NULL);
常用事件包括:
事件名称 | 含义 |
---|---|
LV_EVENT_PRESSED | 按钮被按下 |
LV_EVENT_RELEASED | 按钮被释放 |
LV_EVENT_CLICKED | 按钮被点击(按下+释放) |
LV_EVENT_LONG_PRESSED | 按下后长时间未松开 |
四、自定义按钮外观
你可以通过样式 lv_style_t
来设置按钮的颜色、边框、圆角、动画等:
static lv_style_t style;
lv_style_init(&style);
lv_style_set_radius(&style, 10);
lv_style_set_bg_color(&style, lv_color_hex(0x3498db));
lv_style_set_border_width(&style, 2);lv_obj_add_style(btn, &style, 0);
还可以通过状态改变不同的样式:
lv_style_set_bg_color(&style, lv_color_hex(0x2980b9)); // 按下状态
lv_obj_add_style(btn, &style, LV_STATE_PRESSED);
五、按钮类型(模式)
在早期版本(如 v7)中按钮有 toggle
模式(开关模式),可以实现开/关状态切换。到了 LVGL v8 中,这种模式用 状态 来管理:
lv_obj_add_state(btn, LV_STATE_CHECKED); // 设置为选中状态
lv_obj_clear_state(btn, LV_STATE_CHECKED); // 清除选中状态
六、综合示例
void my_btn_event_cb(lv_event_t * e)
{if(lv_event_get_code(e) == LV_EVENT_CLICKED) {printf("你点击了按钮!\n");}
}void create_my_button(void)
{lv_obj_t *btn = lv_btn_create(lv_scr_act());lv_obj_center(btn);lv_obj_add_event_cb(btn, my_btn_event_cb, LV_EVENT_CLICKED, NULL);lv_obj_t *label = lv_label_create(btn);lv_label_set_text(label, "Hello");
}
七、按钮和输入设备的关系
lv_btn
与 LVGL 的输入设备驱动(如触摸屏、鼠标)紧密相关。用户按下屏幕,LVGL 会派发 LV_EVENT_PRESSED
等事件给按钮对象。因此,要让按钮响应事件,必须正确配置 输入设备驱动(如 lv_indev_drv_t
)。