image.png
文本框是一个基础对象,其上面有一个标签(Label)和一个光标(Cursor)。
可以向文本框中添加文本或字符。长行会被换行,当文本内容变得足够长时,可以滚动文本框。

1.常用方法

创建textarea文本框:

  1. lv_obj_t * lv_textarea_create(lv_obj_t * parent)

设置只有一行:

  1. void lv_textarea_set_one_line(lv_obj_t * obj, bool en)

2.代码实现

  1. void btnm_event_handler(lv_event_t* e){
  2. int code = lv_event_get_code(e);
  3. lv_obj_t* target = lv_event_get_target(e);
  4. lv_obj_t* textarea = lv_event_get_user_data(e);
  5. if(code == LV_EVENT_VALUE_CHANGED){
  6. // 获取单击的按钮编号
  7. uint16_t index = lv_btnmatrix_get_selected_btn(target);
  8. // 获取单击的按钮文本
  9. const char* btn_text = lv_btnmatrix_get_btn_text(target,index);
  10. // 条件判断
  11. if(strcmp(btn_text,LV_SYMBOL_BACKSPACE) == 0){
  12. lv_textarea_del_char(textarea);
  13. }else if (strcmp(btn_text,LV_SYMBOL_NEW_LINE) == 0)
  14. {
  15. printf("enter clicked\n");
  16. lv_event_send(textarea, LV_EVENT_READY, NULL);
  17. }else{
  18. // 向文本框中填入内
  19. lv_textarea_add_text(textarea,btn_text);
  20. }
  21. }
  22. }
  23. static void textarea_event_handler(lv_event_t * e)
  24. {
  25. lv_obj_t * ta = lv_event_get_target(e);
  26. printf("Enter was pressed. The current text is: %s", lv_textarea_get_text(ta));
  27. }
  28. void demo6(){
  29. // 文本框
  30. lv_obj_t* textarea = lv_textarea_create(lv_scr_act());
  31. lv_textarea_set_one_line(textarea,true);
  32. lv_obj_align(textarea,LV_ALIGN_TOP_MID,0,10);
  33. lv_obj_set_width(textarea,220);
  34. lv_obj_add_state(textarea, LV_STATE_FOCUSED);
  35. lv_obj_add_event_cb(textarea, textarea_event_handler, LV_EVENT_READY, textarea);
  36. // 创建矩阵按钮
  37. lv_obj_t* btnm = lv_btnmatrix_create(lv_scr_act());
  38. // 设置矩阵按钮的显示
  39. lv_btnmatrix_set_map(btnm,map);
  40. lv_obj_set_width(btnm,220);
  41. lv_obj_align(btnm,LV_ALIGN_TOP_MID,0,80);
  42. lv_obj_clear_flag(btnm, LV_OBJ_FLAG_CLICK_FOCUSABLE);
  43. // 事件处理
  44. lv_obj_add_event_cb(btnm,btnm_event_handler,LV_EVENT_VALUE_CHANGED,textarea);
  45. }

效果:
image.png