LVGL:拓展部件——键盘 lv_keyboard

一、概述

此控件特点:

  • 特殊Button矩阵:lv_keyboard 本质上是一个经过定制的按钮矩阵控件。每个按钮都可以独立触发事件或响应。
  • 预定义的键映射:lv_keyboard 自带了一套预设的按键布局对应的字符映射表,开发者可以根据需要选择或自定义这些键映射。
  • lv_textarea 配合使用:用户通过lv_keyboard 对象输入的文本会直接送入到 lv_textarea部件中显示。

二、包含组件元素

  • LV_PART_MAIN:背景部分。这部分通常定义了整个键盘区域的外观和视觉风格。
  • LV_PART_ITEMS:键盘上的各个按键元素。

三、相关函数

1、void lv_keyboard_set_textarea(lv_obj_t *kb, lv_obj_t *ta)

将一个 lv_textarea 对象与 lv_keyboard 对象关联起来。当在键盘上按下字符时,这些字符会被输入到指定的文本区域中。

2、void lv_keyboard_set_mode(lv_obj_t * obj, lv_keyboard_mode_t mode);

更改指定键盘对象的显示模式。

  • LV_KEYBOARD_MODE_TEXT_LOWER:小写字母键。
  • LV_KEYBOARD_MODE_TEXT_UPPER:大写字母键。
  • LV_KEYBOARD_MODE_SPECIAL:特殊字符键。
  • LV_KEYBOARD_MODE_NUMBER:数字、正负号(+/-)和小数点。
  • LV_KEYBOARD_MODE_USER_1 ~ LV_KEYBOARD_MODE_USER_4:用户自定义模式。

3、void lv_keyboard_set_map(lv_obj_t * obj, lv_keyboard_mode_t mode, const char * map[], const lv_btnmatrix_ctrl_t ctrl_map[])

更改键盘上显示的按键及其功能。

map: 指向一个字符串数组的指针,这个数组描述了新的按键布局。每个元素代表一个按键上的文本或符号。布局方式与 lv_btnmatrix_set_map() 函数中使用的类似,通常以数组形式存储一系列按键标签,比如字母、数字或特殊符号。

ctrl_map(可选): 指向一个 lv_btnmatrix_ctrl_t 类型数组的指针,该数组用于描述特殊的控制按钮属性,如是否启用长按事件、是否是隐藏键等功能。这部分与 lv_btnmatrix_set_ctrl_map() 函数相似。

lv_obj_t *ta = lv_textarea_create(lv_scr_act());
lv_obj_t *kb = lv_keyboard_create(lv_scr_act());
lv_keyboard_set_textarea(kb, ta);

static const char * kb_map[] = {"1", "3", "5", "7", "A", "B", "C", LV_SYMBOL_BACKSPACE, "\n",
                                "2", "4", "6", "8", "E", "F", "G", LV_SYMBOL_NEW_LINE, "\n",
                                "+", "-", "*", "/", "0", "9", "\n",
                                LV_SYMBOL_CLOSE, "hello world", LV_SYMBOL_OK, NULL};

static const lv_btnmatrix_ctrl_t kb_ctrl[] = {0, LV_BTNMATRIX_CTRL_HIDDEN, 0, 0, 0, 0, 0, 0,
                                              0, 0, 0, 0, 0, 0, 0, 0,
                                              0, 0, 0, 0, 0, 0,
                                              0, 0, 0};

lv_keyboard_set_map(kb, LV_KEYBOARD_MODE_USER_1, kb_map, kb_ctrl);
lv_keyboard_set_mode(kb, LV_KEYBOARD_MODE_USER_1);

这里自定义了一个键盘布局,但是隐藏了第一排的第二个按键。

查看源码,有几个地方值得说一下:

A、键盘控件默认是靠下居中的:

它的尺寸默认宽度和父对象一样,高度为父对象的50%:

B、在控制属性的数组里面可以使用 数字 来表示该按钮在本行中的相对宽度,但数字不能大于7,因为:

这里说前三位表示宽度,前三位能表示的最大数就是7。

可以使用 LV_KB_BTN 设置按键的相对宽度设置按下时会弹出一个提示框。它的定义如下:

#define LV_KB_BTN(width) LV_BTNMATRIX_CTRL_POPOVER | width

这里的 LV_BTNMATRIX_CTRL_POPOVER 属性表示该按键具有弹出窗口(popover)特性。即当用户点击该按键时,可能会弹出一个新的界面或菜单。

C、LV_KEYBOARD_CTRL_BTN_FLAGS 可以使得按键在被按下时只触发一次,并且可以设置为选中状态以显示某种特殊状态或提供视觉反馈。

它的定义如下:

#define LV_KEYBOARD_CTRL_BTN_FLAGS (LV_BTNMATRIX_CTRL_NO_REPEAT | LV_BTNMATRIX_CTRL_CLICK_TRIG | LV_BTNMATRIX_CTRL_CHECKED)
  • LV_BTNMATRIX_CTRL_NO_REPEAT:按键在被按下后不应重复触发事件。通常情况下,如果用户持续按住一个键,系统会不断地发送按键事件。设置了这个标志的按键将不会出现这种连续触发。
  • LV_BTNMATRIX_CTRL_CLICK_TRIG:按键通过单击(点击)触发其关联的动作,而不是需要保持按下状态。
  • LV_BTNMATRIX_CTRL_CHECKED:按键具有选中或激活状态。

4、void lv_keyboard_set_popovers(lv_obj_t * obj, bool en)

设置键盘上按键按下时是否以弹出框(popover)的形式显示按钮提示框。

相关推荐

  1. <span style='color:red;'>LVGL</span>:

    LVGL

    2024-03-20 14:42:01      6 阅读

最近更新

  1. 浅谈chrome引擎

    2024-03-20 14:42:01       0 阅读
  2. C++中 Debug和Release的区别

    2024-03-20 14:42:01       0 阅读
  3. ArduPilot开源代码之AP_OpticalFlow_MSP

    2024-03-20 14:42:01       1 阅读
  4. API分页处理指南:Postman中的高效数据浏览技巧

    2024-03-20 14:42:01       2 阅读
  5. 对称加密与非对称加密如何实现密钥交换

    2024-03-20 14:42:01       2 阅读
  6. 各种音频处理器

    2024-03-20 14:42:01       2 阅读

热门阅读

  1. React 应该如何学习?

    2024-03-20 14:42:01       20 阅读
  2. OSI参考模型各层作用

    2024-03-20 14:42:01       19 阅读
  3. ubuntu 开发软件安装

    2024-03-20 14:42:01       21 阅读
  4. git是什么git能做什么

    2024-03-20 14:42:01       22 阅读
  5. 大会员体系有什么作用?

    2024-03-20 14:42:01       20 阅读