键盘 (Keyboard)
LVGL 可以添加触摸键盘,但是很明显,使用触摸键盘的话必须要使用触摸的输入方式,否则无法驱动键盘。
示例代码
function keyCb(obj, e)
-- 默认处理事件
lvgl.keyboard_def_event_cb(keyBoard, e)
if(e == lvgl.EVENT_CANCEL)then
lvgl.keyboard_set_textarea(keyBoard, nil)
--删除 KeyBoard
lvgl.obj_del(keyBoard)
keyBoard = nil
end
end
function textAreaCb(obj, e)
if (e == lvgl.EVENT_CLICKED) and not keyBoard then
--创建一个 KeyBoard
keyBoard = lvgl.keyboard_create(lvgl.scr_act(), nil)
--设置 KeyBoard 的光标是否显示
lvgl.keyboard_set_cursor_manage(keyBoard, true)
--为 KeyBoard 设置一个文本区域
lvgl.keyboard_set_textarea(keyBoard, textArea)
lvgl.obj_set_event_cb(keyBoard, keyCb)
end
end
textArea = lvgl.textarea_create(lvgl.scr_act(), nil)
lvgl.obj_set_size(textArea, 200, 40)
lvgl.textarea_set_text(textArea, "please input:")
lvgl.obj_align(textArea, DEMO_BASE_CONT, lvgl.ALIGN_CENTER, 0, -45)
lvgl.obj_set_event_cb(textArea, textAreaCb)
创建
通过 keyboard_create
可以创建键盘,实际上只要这一句就可在界面上显示键盘了。很难得的是,键盘没有复制对象,lvgl.keyboard_create
只需要传入一个参数就可以了。
keyBoard = lvgl.keyboard_create(lvgl.scr_act())
模式
键盘支持几种模式, 分别是 大写
,小写
,数字符号
。
可以通过 lvgl.keyboard_set_mode
切换键盘的模式。
lvgl.KEYBOARD_MODE_TEXT_LOWER -- 小写模式
lvgl.KEYBOARD_MODE_TEXT_UPPER -- 大写模式
lvgl.KEYBOARD_MODE_TEXT_SPECIAL -- 特殊符号模式(*)
lvgl.KEYBOARD_MODE_NUMBER -- 数字模式(*)
目前可以通过 API
设置的模式是大小写模式,其余模式需要在键盘上手动切换了,其中数字和符号在键盘上是一种布局,显示在一起的。我们来看下键盘的这几种模式:
小写
大写
数字符号
事件
键盘当然是输入了,不过键盘的输入是针对于 文本框(Textarea)
控件的,要想演示键盘的一个输入效果,需要首先创建一个文本框,同时对文本框控件设置点击事件的回调函数。当文本框控件被点击的时候就会创建一个键盘,同时将键盘的输入绑定到文本框。当键盘点击确定或者取消时,就销毁键盘,在下次点击的时候重新创建。
键盘设置回调函数的方式如下,但是单独设置键盘回调函数是没有什么意义的,完整的代码可以参考上面的示例代码
。
function keyCb(obj, e)
-- 默认处理事件
lvgl.keyboard_def_event_cb(keyBoard, e)
if(e == lvgl.EVENT_CANCEL)then
lvgl.keyboard_set_textarea(keyBoard, nil)
--删除 KeyBoard
lvgl.obj_del(keyBoard)
keyBoard = nil
end
end
keyBoard = lvgl.keyboard_create(lvgl.scr_act(), nil)
lvgl.obj_set_event_cb(keyBoard, keyCb)
需要注意的是,在处理键盘事件的开始,首先要调用 lvgl.keyboard_def_event_cb
函数,来进行一些默认的事件处理。
API
lvgl.imgbtn_create
调用 | lvgl.imgbtn_create(par) |
---|---|
功能 | 创建一个键盘对象 |
返回 | 指向创建键盘的指针 |
参数 | |
par | 指向对象的指针, 它将是键盘的父对象 |
lvgl.keyboard_set_textarea
调用 | lvgl.keyboard_set_textarea(kb, ta) |
---|---|
功能 | 绑定文本框,键盘的输入会传到这里 |
参数 | |
kb | 指向创建键盘的指针 |
ta | 需要绑定的文本框对象的指针。 |
lvgl.keyboard_set_mode
调用 | lvgl.keyboard_set_mode(kb, mode) |
---|---|
功能 | 设置键盘的新模式 |
参数 | |
kb | 指向键盘对象的指针 |
mode | 需要设置的键盘模式 |
lvgl.keyboard_set_cursor_manage
调用 | lvgl.keyboard_set_cursor_manage(kb, en) |
---|---|
功能 | 设置键盘在激活文本框时是否显示光标 |
参数 | |
kb | 指向键盘对象的指针 |
en | true 显示光标, false 不显示光标 |
lvgl.keyboard_get_textarea
调用 | lvgl.keyboard_get_textarea(kb) |
---|---|
功能 | 获取键盘绑定的文本框 |
返回 | 键盘绑定的文本框 |
参数 | |
kb | 指向键盘对象的指针 |
lvgl.keyboard_get_mode
调用 | lvgl.keyboard_get_mode(kb) |
---|---|
功能 | 获取键盘当前的模式 |
返回 | 键盘当前的模式 |
参数 | |
kb | 指向键盘对象的指针 |
lvgl.keyboard_get_cursor_manage
调用 | lvgl.keyboard_get_cursor_manage(kb) |
---|---|
功能 | 获取键盘当前是否会激活光标 |
返回 | true 会显示光标,false 不会显示光标 |
参数 | |
kb | 指向键盘对象的指针 |
lvgl.keyboard_def_event_cb
调用 | lvgl.keyboard_def_event_cb(kb, e) |
---|---|
功能 | 默认处理键盘事件的程序。 |
参数 | |
kb | 指向键盘对象的指针 |
e | 键盘接收到的事件 |