怎么获取lv_keyboard_set_textarea(kb, ta);里面的内容赋给上个页面的文本框?

各位大佬,刚学习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);
    }
}

好的 ,感谢细心指导,我再试试,