银杏科技有限公司旗下技术文档发布平台 | |||
技术支持电话 | 0379-69926675-801 | ||
技术支持邮件 | Gingko@vip.163.com | ||
版本 | 日期 | 作者 | 修改内容 |
---|---|---|---|
V1.0 | 2021-01-06 | yang | 初次建立 |
键盘对象是一个特殊的按钮矩阵,具有预定义的按键映射和其他特性,以实现虚拟键盘的文本写入。键盘包括两个部分:
键盘具有以下模式:
该 TEXT 模式布局包含要改变模式的按钮。使用 lv_keyboard_set_mode(kb, mode) 可以手动设置键盘模式,默认键盘模式为LV_KEYBOARD_MODE_TEXT_UPPER。
使用 lv_keyboard_set_textarea(kb, ta) 可以为键盘分配一个文本区域,键盘控件自动将用户单击的字符放在此处。
指定文本区域的光标可以通过键盘管理:当键盘被分配给新的文本区域时,前一个文本区域的光标将被隐藏,新文本区域的光标将被显示。当用户通过点击“Ok”或“Close”按钮关闭键盘时,光标也将被隐藏。光标管理器功能由 lv_keyboard_set_cursor_manage(kb, true)启用,默认为不启用。
用户可以使用 lv_keyboard_set_map(kb, map) 和 lv_keyboard_set_ctrl_map(kb, ctrl_map) 为键盘指定一个新的映射(布局)。了解更多关于按钮矩阵对象。请记住,使用以下关键字将产生与原始键盘分布相同的效果:
除了通用事件外,键盘还会发送以下特殊事件:
键盘具有一个名为 lv_keyboard_def_event_cb 的默认事件处理回调函数。它处理按钮的按下,键盘分布的更改,指定文本区域等。用户可以将其完全替换为自定义事件处理回调函数,并且,可以在自定义的回调函数开头调用 lv_keyboard_def_event_cb 以处理与前面相同的事情。
以下键值由按钮处理:
注意:在测试时发现按键的f、c、F、C键触摸不到,在lv_keyboard.c文件中修改对应按键的相对宽度后可以正常使用。
/* lv_keyboard.c */ /* 键盘按键标签文本数组 */ static const char * const default_kb_map_lc[] = {"1#", "q", "w", "e", "r", "t", "y", "u", "i", "o", "p", LV_SYMBOL_BACKSPACE, "\n", "ABC", "a", "s", "d", "f", "g", "h", "j", "k", "l", LV_SYMBOL_NEW_LINE, "\n", "_", "-", "z", "x", "c", "v", "b", "n", "m", ".", ",", ":", "\n", LV_SYMBOL_CLOSE, LV_SYMBOL_LEFT, " ", LV_SYMBOL_RIGHT, LV_SYMBOL_OK, "" }; /* 按键对应相对宽度 */ static const lv_btnmatrix_ctrl_t default_kb_ctrl_lc_map[] = { LV_KEYBOARD_CTRL_BTN_FLAGS | 5, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 7, LV_KEYBOARD_CTRL_BTN_FLAGS | 7, 4, 4, 4, 5, 4, 4, 4, 4, 4, 6, /* f键宽度相对加一,5 */ 6, 6, 6, 6, 7, 6, 6, 6, 6, 6, 6, 6, /* c键宽度相对加一,7 */ LV_KEYBOARD_CTRL_BTN_FLAGS | 2, 2, 6, 2, LV_KEYBOARD_CTRL_BTN_FLAGS | 2 };
lv_obj_t * kb; lv_obj_t * ta; lv_obj_t * ta2; static void ta_event(lv_obj_t * obj, lv_event_t event) /* 文本区域1回调函数 */ { lv_keyboard_set_textarea(kb, ta); /* 获取键盘光标 */ lv_textarea_set_cursor_hidden(ta2, true); /* 隐藏光标 */ lv_textarea_set_cursor_hidden(ta, false); /* 显示光标 */ } static void ta2_event(lv_obj_t * obj, lv_event_t event) /* 文本区域2回调函数 */ { lv_keyboard_set_textarea(kb, ta2); /* 获取键盘光标 */ lv_textarea_set_cursor_hidden(ta, true); /* 隐藏光标 */ lv_textarea_set_cursor_hidden(ta2, false); /* 显示光标 */ } void lv_gui_run(void) { lvgl2rtt_init("lcd"); /* 初始化lvgl2rtt */ kb = lv_keyboard_create(lv_scr_act(), NULL); /* 创建键盘对象 */ lv_keyboard_set_cursor_manage(kb, true); /* 使能光标管理 */ ta = lv_textarea_create(lv_scr_act(), NULL); /* 创建文本区域1 */ lv_obj_set_size(ta, 200, 100); /* 设置尺寸 */ lv_obj_align(ta, NULL, LV_ALIGN_IN_TOP_LEFT, 20, 20); /* 设置位置 */ lv_textarea_set_text(ta, ""); /* 设置文本 */ lv_obj_set_event_cb(ta, ta_event); /* 设置回调函数 */ ta2 = lv_textarea_create(lv_scr_act(), NULL); /* 创建文本区域1 */ lv_obj_set_size(ta2, 200, 100); /* 设置尺寸 */ lv_obj_align(ta2, NULL, LV_ALIGN_IN_TOP_RIGHT, -20, 20);/* 设置位置 */ lv_textarea_set_text(ta2, ""); /* 设置文本 */ lv_obj_set_event_cb(ta2, ta2_event); /* 设置回调函数 */ lv_keyboard_set_textarea(kb, ta); /* 为键盘分配文本区域 */ }