I tried to set a copied textarea to a keyboard,
the keyboard can type well, however when touching for changing cursor position , the texterea is freezed.
Can’t type anymore without any error occurs.
As the following video. ( the copied-textarea is freezed at 0:25 )
Code for 2 textareas.
lv_obj_t* login_ta = lv_ta_create(lv_scr_act(), NULL);
lv_obj_set_event_cb(login_ta, ta_event_cb);
lv_obj_align(login_ta, NULL, LV_ALIGN_CENTER, 0, -40);
lv_ta_set_one_line(login_ta, true);
lv_ta_set_cursor_type(login_ta, LV_CURSOR_NONE);
lv_ta_set_text(login_ta, "");
lv_ta_set_placeholder_text(login_ta, "Login");
lv_obj_t* pass_ta = lv_ta_create(lv_scr_act(), NULL);
lv_obj_set_event_cb(pass_ta, ta_event_cb);
lv_obj_align(pass_ta, login_ta, LV_ALIGN_OUT_BOTTOM_MID, 0, 20);
lv_ta_set_pwd_mode(pass_ta,true);
lv_ta_set_one_line(pass_ta,true);
lv_ta_set_cursor_type(pass_ta, LV_CURSOR_NONE);
lv_ta_set_text(pass_ta, "");
lv_ta_set_placeholder_text(pass_ta, "Password");
Code for event_cb
lv_obj_t* kbd_frame = NULL; /* keyboard frame by lv_obj_create() */
lv_obj_t* kbd_kb = NULL; /* keyboard's kb by lv_kb_create() */
lv_obj_t* kbd_ta = NULL; /* keyboard's ta by copying from outside ta */
lv_obj_t* kbd_ta_outside = NULL; /* outside-ta that request to edit */
/* event_cb for kbd_kb . Handle for LV_EVENT_APPLY and LV_EVENT_CANCEL only*/
void kbd_kb_event_cb(lv_obj_t* kbd_kb, lv_event_t ev){
/* by default kb event_cb first */
lv_kb_def_event_cb(kbd_kb, ev);
if(ev == LV_EVENT_APPLY){
Serial.println("On Apply");
/* set text to outside-ta from kbd_ta's text */
if( kbd_ta_outside != NULL)
lv_ta_set_text( kbd_ta_outside, lv_ta_get_text( lv_kb_get_ta(kbd_kb) ));
lv_obj_set_hidden(kbd_frame, true);
lv_kb_set_ta(kbd_kb, NULL);
kbd_ta_outside = NULL;
}else
if(ev == LV_EVENT_CANCEL){
Serial.println("On Cancel");
lv_obj_set_hidden(kbd_frame, true);
lv_kb_set_ta(kbd_kb, NULL);
kbd_ta_outside = NULL;
}
}
/* event_cb for outside-ta. Handle for LV_EVENT_CLICK only*/
void ta_event_cb(lv_obj_t* ta, lv_event_t ev ){
if(ev != LV_EVENT_CLICKED) return;
/* create keyboard */
if( kbd_frame == NULL) {
kbd_frame = lv_obj_create(lv_scr_act(), NULL);
lv_obj_set_size(kbd_frame, 240,240);
kbd_kb = lv_kb_create(kbd_frame, NULL);
lv_obj_set_size(kbd_kb, 240,180);
lv_obj_align(kbd_kb, NULL, LV_ALIGN_IN_BOTTOM_MID,0,0);
lv_obj_set_event_cb(kbd_kb, kbd_kb_event_cb);
}
kbd_ta_outside = ta;
/* delete old kbd_ta */
if( kbd_ta != NULL) lv_obj_del(kbd_ta);
/* create kbd_ta by copying from kbd_ta_outside */
kbd_ta = lv_ta_create(kbd_frame, kbd_ta_outside);
lv_ta_set_cursor_type(kbd_ta, LV_CURSOR_LINE);
lv_obj_align(kbd_ta, NULL, LV_ALIGN_IN_TOP_LEFT, 6,6);
lv_obj_set_width(kbd_ta, 240-12);
/* set kbd_ta to kbd_kb */
lv_kb_set_ta(kbd_kb, kbd_ta);
/* move to forground and unhide */
lv_obj_move_foreground(kbd_frame);
lv_obj_set_hidden(kbd_frame, false);
}