键盘 (Keyboard)

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())
```

## 模式
键盘支持几种模式, 分别是 `大写`,`小写`,`数字符号`。
可以通过 `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` 设置的模式是大小写模式,其余模式需要在键盘上手动切换了,其中数字和符号在键盘上是一种布局,显示在一起的。我们来看下键盘的这几种模式:
**小写**

**大写**

**数字符号**

## 事件
键盘当然是输入了,不过键盘的输入是针对于 `文本框(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)