各位大佬,刚学习LVGL 请教下怎么获取lv_keyboard_set_textarea(kb, ta);里面的内容赋给上个页面的文本框?
这个简单,以文档中的示例为例: Keyboard(键盘)(lv_keyboard) — 百问网LVGL中文教程文档 文档 (100ask.net)
主要在于event中进行处理:
static void ta_event_cb(lv_event_t * e)
{
lv_event_code_t code = lv_event_get_code(e);
lv_obj_t * ta_new = lv_event_get_target(e);
lv_obj_t * kb = lv_event_get_user_data(e);
lv_obj_t * ta_old = lv_keyboard_get_textarea(kb);
char * ta_old_text = lv_textarea_get_text(ta_old); // 获取旧ta中的内容
lv_textarea_set_text(ta_new, ta_old_text); // 将旧ta中的内容赋给新ta
if(code == LV_EVENT_FOCUSED) {
lv_keyboard_set_textarea(kb, ta_new);
lv_obj_clear_flag(kb, LV_OBJ_FLAG_HIDDEN);
}
if(code == LV_EVENT_DEFOCUSED) {
lv_keyboard_set_textarea(kb, NULL);
lv_obj_add_flag(kb, LV_OBJ_FLAG_HIDDEN);
}
}
这段代码未经验证,这个思路是没有问题的。
1 个赞
刚才试了一下,就卡死键盘页面了
你可以尝试自己按照这个思路进行改进,这个是经过简单试验的代码:
static void ta_event_cb(lv_event_t * e)
{
static lv_obj_t * last_focused_ta;
lv_event_code_t code = lv_event_get_code(e);
lv_obj_t * ta_new = lv_event_get_target(e);
lv_obj_t * kb = lv_event_get_user_data(e);
if(code == LV_EVENT_FOCUSED) {
if(last_focused_ta != NULL)
{
char * ta_old_text = lv_textarea_get_text(last_focused_ta); // 获取旧ta中的内容
lv_textarea_set_text(ta_new, ta_old_text); // 将旧ta中的内容赋给新ta
last_focused_ta = NULL;
}
lv_keyboard_set_textarea(kb, ta_new);
lv_obj_clear_flag(kb, LV_OBJ_FLAG_HIDDEN);
}
if(code == LV_EVENT_DEFOCUSED) {
last_focused_ta= lv_keyboard_get_textarea(kb);
lv_keyboard_set_textarea(kb, NULL);
lv_obj_add_flag(kb, LV_OBJ_FLAG_HIDDEN);
}
}
好的 ,感谢细心指导,我再试试,