您尚未登录。

楼主 #1 2020-11-06 12:20:34

vip888888
会员
注册时间: 2020-07-16
已发帖子: 141
积分: 138

LVGL 键盘输入 自己处理CLOSE事件及单击显示键盘 外击关闭键盘

从lvgl的教程了看到有现成的keyboard输入,但是发现有很多不好使的地方,一个是可以点击关闭就把键盘给关闭了。第二个是没有提供给用户处理关闭等事件的接口。此例子实现点击输入框显示键盘输入,点击输入框外关闭键盘。实验效果如下:

输入部分代码如下:希望帮到有需求的人。

static void ta_event_cb(lv_obj_t * ta, lv_event_t event);
static lv_obj_t * kb = NULL;

static void kb_event_cb(lv_obj_t * p_key, lv_event_t event)
{
	if (event == LV_EVENT_CANCEL)
	{
		printf("CLOSE\n");  //自己处理关闭事件
		return;
	}
	else if (event == LV_EVENT_APPLY)
	{
		printf("OK\n");   //OK事件
		return;
	}

	lv_keyboard_def_event_cb(p_key, event);  //这里回调原来的处理函数
}

static void ta_event_cb(lv_obj_t * ta, lv_event_t event)
{
	if (event == LV_EVENT_VALUE_CHANGED) {
		const char * txt = lv_textarea_get_text(ta);
		if (txt[0] >= '0' && txt[0] <= '9' &&
			txt[1] >= '0' && txt[1] <= '9' &&
			txt[2] != ':')
		{
			lv_textarea_set_cursor_pos(ta, 2);
			lv_textarea_add_char(ta, ':');
		}
	}
	else if (event == LV_EVENT_FOCUSED)
	{
		if (kb != NULL)return;
		kb = lv_keyboard_create(t2, NULL);
		lv_obj_set_size(kb, 400, 200);
		lv_keyboard_set_mode(kb, LV_KEYBOARD_MODE_NUM);
		lv_keyboard_set_textarea(kb, ta);
		lv_keyboard_set_cursor_manage(kb, true);
		lv_obj_set_event_cb(kb, kb_event_cb);  //设置自己处理事件,避免kb自己点击就关闭了输入
	}
	else if (event == LV_EVENT_DEFOCUSED)
	{
		if (kb != NULL)
		{
			lv_obj_del(kb);
			kb = NULL;
		}
	}
}

static parameter_creat(lv_obj_t * parent)
{
	lv_page_set_scrl_layout(parent, LV_LAYOUT_PRETTY_TOP);
	lv_obj_t * ta = lv_textarea_create(parent, NULL);
	lv_obj_set_event_cb(ta, ta_event_cb);
	lv_textarea_set_accepted_chars(ta, "0123456789:");
	lv_textarea_set_max_length(ta, 5);
	lv_textarea_set_one_line(ta, true);
	lv_textarea_set_text(ta, "");

}

最近编辑记录 vip888888 (2020-11-06 12:30:15)

离线

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn