如何正确使用键盘上的“键盘”图标来关闭键盘?

我create了一个小screen用于放置文本域和键盘ui_Keyboard6,键盘输入文字能在文本域中显示出来,该screen默认隐藏

lv_obj_add_flag(ui_num2, LV_OBJ_FLAG_HIDDEN);

同时,我在键盘添加了点击事件

lv_obj_add_event_cb(ui_Keyboard6, keyboard_event6, LV_EVENT_ALL, NULL);

我还写一个textarea,绑定了点击事件,只要点击它就能弹出小screen

lv_obj_add_event_cb(ui_TextArea3, ui_event_TextArea12, LV_EVENT_ALL, NULL);

void ui_event_TextArea12(lv_event_t * e){

lv_event_code_t event_code = lv_event_get_code(e);

if(event_code == LV_EVENT_CLICKED) {
    lv_obj_clear_flag(ui_num2, LV_OBJ_FLAG_HIDDEN);
}

}
现在我想按下键盘上的“键盘”图标来再次隐藏小键盘,我直接用了lv_keyboard.c里面官方给的代码,复制简化如下:
void keyboard_event6(lv_event_t * e){

lv_obj_t * obj = lv_event_get_target(e);
LV_ASSERT_OBJ(obj, MY_CLASS);
lv_keyboard_t * keyboard = (lv_keyboard_t *)obj;
uint16_t btn_id   = lv_btnmatrix_get_selected_btn(obj);

if(btn_id == LV_BTNMATRIX_BTN_NONE) return;

const char * txt = lv_btnmatrix_get_btn_text(obj, lv_btnmatrix_get_selected_btn(obj));

if(txt == NULL) return;

if(strcmp(txt, LV_SYMBOL_KEYBOARD) == 0) {
    lv_obj_add_flag(ui_num2, LV_OBJ_FLAG_HIDDEN);
    return;
}

}
结果就是:
1、第一次点击textarea弹出键盘,按下“键盘”图标能隐藏掉
2、但是,当我再次点击textarea时,就不对劲了,弹出来的小screen显示不全,下半部分将近1/5screen被裁掉了,而且点击“键盘”图标没有反应,直接卡住
想问一下老师们,出现这样的情况是什么原因?我应该怎样改正?用的lvgl版本为8.3.6

这里v9的参考,v8也是通用的: 3-18-2_LVGL入门教程之键盘控件(lv_keyboard)的用法(课后思考1-如何自定义默认的事件处理回调)_哔哩哔哩_bilibili

1 个赞