键盘 (Keyboard)

::: hljs-center ![keyboard.png](https://cos.easydoc.net/79463195/files/krtgilfy.png) ::: LVGL 可以添加触摸键盘,但是很明显,使用触摸键盘的话必须要使用触摸的输入方式,否则无法驱动键盘。 ## 示例代码 ```lua 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` 只需要传入一个参数就可以了。 ```lua keyBoard = lvgl.keyboard_create(lvgl.scr_act()) ``` ::: hljs-center ![键盘.bmp](https://cos.easydoc.net/71161452/files/ks8ney0t.bmp) ::: ## 模式 键盘支持几种模式, 分别是 `大写`,`小写`,`数字符号`。 可以通过 `lvgl.keyboard_set_mode` 切换键盘的模式。 ```lua lvgl.KEYBOARD_MODE_TEXT_LOWER -- 小写模式 lvgl.KEYBOARD_MODE_TEXT_UPPER -- 大写模式 lvgl.KEYBOARD_MODE_TEXT_SPECIAL -- 特殊符号模式(*) lvgl.KEYBOARD_MODE_NUMBER -- 数字模式(*) ``` 目前可以通过 `API` 设置的模式是大小写模式,其余模式需要在键盘上手动切换了,其中数字和符号在键盘上是一种布局,显示在一起的。我们来看下键盘的这几种模式: ::: hljs-center **小写** ![小写.bmp](https://cos.easydoc.net/71161452/files/ks8omkp6.bmp) **大写** ![大写.png](https://cos.easydoc.net/71161452/files/ks8ompkx.png) **数字符号** ![数字符号.bmp](https://cos.easydoc.net/71161452/files/ks8omslw.bmp) ::: ## 事件 键盘当然是输入了,不过键盘的输入是针对于 `文本框(Textarea)` 控件的,要想演示键盘的一个输入效果,需要首先创建一个文本框,同时对文本框控件设置点击事件的回调函数。当文本框控件被点击的时候就会创建一个键盘,同时将键盘的输入绑定到文本框。当键盘点击确定或者取消时,就销毁键盘,在下次点击的时候重新创建。 键盘设置回调函数的方式如下,但是单独设置键盘回调函数是没有什么意义的,完整的代码可以参考上面的`示例代码`。 ```lua 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|键盘接收到的事件| [参考链接(C语言)](https://docs.lvgl.io/7.11/widgets/keyboard.html)