LVGL 虚拟键盘使用
一、使用例程
二、使用方式
函数的详细说明请看 lv_keyboard.h
文件
-
创建对象
lv_obj_t * lv_keyboard_create(lv_obj_t * parent); lv_obj_t * kb = lv_keyboard_create(lv_scr_act()); -
设置模式
void lv_keyboard_set_mode(lv_obj_t * kb, lv_keyboard_mode_t mode); - LV_KEYBOARD_MODE_TEXT_LOWER - 显示小写字母
- LV_KEYBOARD_MODE_TEXT_UPPER - 显示大写字母
- LV_KEYBOARD_MODE_TEXT_SPECIAL - 显示特殊字符
- LV_KEYBOARD_MODE_NUM - 显示数字,+ /-号和小数点。
注意:默认更多是 LV_KEYBOARD_MODE_TEXT_UPPER 。
-
分配文本区域
void lv_keyboard_set_textarea(lv_obj_t * kb, lv_obj_t * ta); 将文本输入区与键盘进行关联
-
自定义键盘
typedef uint16_t lv_btnmatrix_ctrl_t; void lv_keyboard_set_map(lv_obj_t * kb, lv_keyboard_mode_t mode, const char * map[], const lv_btnmatrix_ctrl_t ctrl_map[]); 详细用法见lv_example_keyboard_2()
注意:以下关键字将具有与原始键盘相同的效果:- LV_SYMBOL_OK: 应用.
- LV_SYMBOL_CLOSE: 关闭.
- LV_SYMBOL_BACKSPACE: 从左侧删除。
- LV_SYMBOL_LEFT: 向左移动光标。
- LV_SYMBOL_RIGHT: 向右移动光标。
- “ABC”: 加载大写键盘。
- “abc”: 加载小写键盘。
- “Enter”: 换行.
-
事件
除了 通用事件 ,键盘还支持以下 特殊事件 :- LV_EVENT_VALUE_CHANGED:按下/释放按钮时发送,或长按后重复发送。事件数据设置为按下/释放按钮的ID。
- LV_EVENT_READY: OK按钮被点击
- LV_EVENT_CANCEL:关闭按钮被点击
三、程序
#include "lvgl/lvgl.h" /** * @brief 文本事件 * @param e 事件对象 */ static void ta_event_cb(lv_event_t * e) { lv_event_code_t code = lv_event_get_code(e); // 获取事件编码 lv_obj_t * ta = lv_event_get_target(e); // 获取文本对象 lv_obj_t * kb = (lv_obj_t *)lv_event_get_user_data(e); // 获取键盘对象 /* 获取文本点击事件 */ if(code == LV_EVENT_CLICKED) { lv_keyboard_set_textarea(kb, ta); // 将键盘与文本进行关联 lv_obj_clear_flag(kb, LV_OBJ_FLAG_HIDDEN); // 清除键盘的隐身标志,显示键盘 lv_obj_add_state(ta, LV_STATE_FOCUSED); // 将文本框设置为聚焦状态 } /* 获取文本聚焦事件 */ // if(code == LV_EVENT_FOCUSED) { // lv_keyboard_set_textarea(kb, ta); // 将键盘与文本进行关联 // 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); // 添加键盘隐藏标志,隐藏键盘 } } /** * @brief 键盘确认事件 * @param e 事件对象 */ static void kb_event_cb(lv_event_t * e) { lv_obj_t * kb = lv_event_get_target(e); // 获取当前事件对象,也就是键盘对象 lv_obj_t * ta = lv_keyboard_get_textarea(kb); // 获取与键盘绑定的输入缓冲区的对象 lv_keyboard_set_textarea(kb, NULL); // 取消键盘的关联 lv_obj_add_flag(kb, LV_OBJ_FLAG_HIDDEN); // 添加键盘隐藏标志,隐藏键盘 lv_obj_clear_state(ta, LV_STATE_FOCUSED); // 清除文本框的聚焦状态 } /** * @brief 键盘输入测试案例 */ void lv_example_keyboard(void) { /* 创建一个键盘对象 */ lv_obj_t * kb = lv_keyboard_create(lv_scr_act()); /* 创建一个文本区域,用于键盘输入后的信息 */ lv_obj_t * ta = lv_textarea_create(lv_scr_act()); lv_obj_align(ta, LV_ALIGN_TOP_MID, 0, 10); // 相对位置设置 lv_obj_set_size(ta, lv_pct(90), 80); // 文本框大小 lv_textarea_set_placeholder_text(ta, "Click Enter"); // 文本提示信息 lv_obj_add_state(ta, LV_STATE_DEFAULT); // 设置文本框为默认状态 /* 文本控件的所有事件*/ lv_obj_add_event_cb(ta, ta_event_cb, LV_EVENT_ALL, kb); /* 初始时将键盘隐藏 */ lv_keyboard_set_textarea(kb, NULL); // 未将键盘与输入区绑定 lv_obj_add_flag(kb, LV_OBJ_FLAG_HIDDEN); // 将表示将键盘隐藏 /* 键盘的确认事件 */ lv_obj_add_event_cb(kb, kb_event_cb, LV_EVENT_READY , NULL); }
注意:从程序中可以看出,文本的输入状态只用聚焦和散焦即可,因为我想在键盘中通过确认按钮对键盘进行隐藏,但是又无法使文本进入散焦状态,存在点击文本时光标不闪烁的问题,所以我采取了点击事件,将文本改为聚焦状态。
如果哪位大佬知道怎么使文本散焦的办法,可否告知一下。
参考文献
LVGL 键盘|极客笔记:<https://deepinout.com/lvgl-tutorials/lvgl-widgets/lvgl-lv_keyboard.html
本文来自博客园,作者:浇筑菜鸟,转载请注明原文链接:https://www.cnblogs.com/jzcn/p/16720231.html
如本博客的内容侵犯了你的权益,请与以下地址联系,本人获知后,马上删除。同时本人深表歉意,并致以崇高的谢意! cn_jiaozhu@qq.com
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具