lvgl 7.8版本textarea和keybord应用

定义2个全局变量,一个保存布局,一个保存keyborder

 static lv_obj_t* cont;
 static lv_obj_t* kb;

定义并实现一个创建textarea的函数

/**
* @brief创建textarea
*/
void textarea_create(void)
{
// 背景屏幕创建并加载
	  lv_obj_t *screen = lv_obj_create(lv_scr_act(), NULL);
    lv_obj_set_size(screen, LV_HOR_RES, LV_VER_RES);
    lv_obj_set_style_local_bg_color(screen, LV_OBJ_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_MAKE(0,180,255));   //配置背景色

    // 容器布局创建
    cont = lv_cont_create(screen, NULL);
    lv_cont_set_layout(cont, LV_LAYOUT_PRETTY_MID);
    lv_cont_set_fit2(cont, LV_FIT_NONE, LV_FIT_TIGHT);
    lv_obj_set_width(cont, LV_HOR_RES);
    lv_obj_set_event_cb(cont, screen_event_cb);
    lv_obj_set_click(cont, true);  // 可点击使能
   
    // textarea创建
    lv_obj_t* ta = lv_textarea_create(cont, NULL);
    lv_cont_set_fit2(ta, LV_FIT_PARENT, LV_FIT_NONE);
    lv_textarea_set_text(ta, "");
    lv_textarea_set_placeholder_text(ta, "E-mail address");
    lv_textarea_set_one_line(ta, true);
    lv_textarea_set_cursor_hidden(ta, true);
    lv_obj_set_event_cb(ta, ta_event_handler);

    ta = lv_textarea_create(cont, ta);
    lv_textarea_set_pwd_mode(ta, true);
    lv_textarea_set_placeholder_text(ta, "Password");

    ta = lv_textarea_create(cont, NULL);
    lv_cont_set_fit2(ta, LV_FIT_PARENT, LV_FIT_NONE);
    lv_textarea_set_text(ta, "");
    lv_textarea_set_placeholder_text(ta, "Message");
    lv_textarea_set_cursor_hidden(ta, true);
    lv_obj_set_event_cb(ta, ta_event_handler);
    lv_cont_set_fit4(ta, LV_FIT_PARENT, LV_FIT_PARENT, LV_FIT_NONE, LV_FIT_PARENT);
}

实现相关回调函数

/**
* @brief keyboard回调函数
*/
static void kb_event_cb(lv_obj_t* _kb, lv_event_t e)
 {
     lv_keyboard_def_event_cb(kb, e);

     if (e == LV_EVENT_CANCEL) {
         if (kb) {
             lv_obj_set_height(cont, LV_VER_RES);
             lv_obj_del(kb);
             kb = NULL;
         }
     }
 }
 /**
 * @brief textarea回调函数
 */
 static void ta_event_handler(lv_obj_t* ta, lv_event_t e)
 {
     if (e == LV_EVENT_RELEASED) {
         if (kb == NULL) {
             lv_obj_set_height(cont, LV_VER_RES / 2);
             kb = lv_keyboard_create(lv_scr_act(), NULL);
             lv_obj_set_event_cb(kb, kb_event_cb);

             lv_indev_wait_release(lv_indev_get_act());
         }
         lv_textarea_set_cursor_hidden(ta, false);
      /*   lv_page_focus(t1, lv_textarea_get_label(ta), LV_ANIM_ON);*/
         lv_keyboard_set_textarea(kb, ta);
     }
     else if (e == LV_EVENT_DEFOCUSED) {
         lv_textarea_set_cursor_hidden(ta, true);
     }
 }
 /**
 * @brief 容器点击回调函数
 */
 static void screen_event_cb(lv_obj_t* obj, lv_event_t event)
 {
     if (event == LV_EVENT_CLICKED)
     {
         lv_event_send(kb, LV_EVENT_CANCEL, NULL);
     }
 }

调用textarea_create函数并运行,效果如下

效果图

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

风雨依依

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值