hi按钮Button是用户和程序的一种交互手段。
image.png

1. 普通Button

创建Button:

  1. lv_obj_t * lv_btn_create(lv_obj_t * parent)

添加事件处理:

  1. struct _lv_event_dsc_t * lv_obj_add_event_cb(lv_obj_t * obj, lv_event_cb_t event_cb,
  2. lv_event_code_t filter,void * user_data)

参数1:按钮控件 参数2:回调函数 参数3:处理的事件 参数4:传递用户数据

示例代码:

  1. void first_screen(){
  2. // 创建按钮
  3. lv_obj_t* btn = lv_btn_create(lv_scr_act());
  4. lv_obj_align(btn,LV_ALIGN_CENTER,0,0);
  5. // 创建按钮上的文本
  6. lv_obj_t* label = lv_label_create(btn);
  7. lv_label_set_text(label,"button");
  8. }

2.可选中Button

  1. void first_screen(){
  2. lv_obj_t * label;
  3. lv_obj_t * btn2 = lv_btn_create(lv_scr_act());
  4. lv_obj_align(btn2, LV_ALIGN_CENTER, 0, 0);
  5. //设置按钮可以被选中
  6. lv_obj_add_flag(btn2, LV_OBJ_FLAG_CHECKABLE);
  7. label = lv_label_create(btn2);
  8. lv_label_set_text(label, "Toggle");
  9. }

image.pngimage.png

3.按钮事件处理

普通按钮需要处理点击事件,可选中按钮需要处理选中状态切换事件。
添加事件处理:

  1. struct _lv_event_dsc_t * lv_obj_add_event_cb(lv_obj_t * obj, lv_event_cb_t event_cb,
  2. lv_event_code_t filter,void * user_data)

参数1:需要进行事件处理的object 参数2:事件处理回调函数 参数3:需要处理的事件 参数4:传递用户数据

普通按钮点击事件:

  1. //事件回调函数
  2. void event_handler(lv_event_t * e){
  3. int code = lv_event_get_code(e);
  4. lv_obj_t* obj = lv_event_get_target(e);
  5. if(code == LV_EVENT_CLICKED){
  6. lv_obj_t* label = lv_event_get_user_data(e);
  7. lv_label_set_text(label,"itheima");
  8. printf("clicked\n");
  9. }
  10. }
  11. void first_screen(){
  12. lv_obj_t * label;
  13. lv_obj_t * btn1 = lv_btn_create(lv_scr_act());
  14. //给按钮设置点击事件处理
  15. lv_obj_add_event_cb(btn1, event_handler, LV_EVENT_CLICKED, NULL);
  16. ...
  17. }

可选中Button事件处理:

  1. //事件回调
  2. void event_handler(lv_event_t * e){
  3. lv_event_code_t code = lv_event_get_code(e);
  4. if(code==LV_EVENT_VALUE_CHANGED){
  5. printf("toggled btn\n");
  6. }
  7. }
  8. void first_screen(){
  9. lv_obj_t * label;
  10. lv_obj_t * btn2 = lv_btn_create(lv_scr_act());
  11. lv_obj_add_event_cb(btn2, event_handler, LV_EVENT_VALUE_CHANGED, NULL);
  12. ...
  13. }

区分多个按钮事件:

多个按钮点击事件使用通过同一个回调函数处理时,可以在添加事件时通过user_data参数区分

  1. void event_handler(lv_event_t * e){
  2. lv_event_code_t code = lv_event_get_code(e);
  3. char *d = (char *)lv_event_get_user_data(e);
  4. if(code==LV_EVENT_CLICKED){
  5. if(strcmp(d,"btn1")==0){
  6. printf("click data1\n");
  7. }else if(strcmp(d,"btn2")==0){
  8. printf("click data2\n");
  9. }
  10. }
  11. }
  12. void first_screen(){
  13. lv_obj_t * label;
  14. char *data1 = "btn1";
  15. char *data2 = "btn2";
  16. lv_obj_t * btn1 = lv_btn_create(lv_scr_act());
  17. ...
  18. lv_obj_t * btn2 = lv_btn_create(lv_scr_act());
  19. lv_obj_add_event_cb(btn2, event_handler, LV_EVENT_CLICKED, data2);
  20. ...
  21. }