LVGL:拓展部件——键盘 lv_keyboard

这篇具有很好参考价值的文章主要介绍了LVGL:拓展部件——键盘 lv_keyboard。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、概述

此控件特点:

  • 特殊Button矩阵:lv_keyboard 本质上是一个经过定制的按钮矩阵控件。每个按钮都可以独立触发事件或响应。
    LVGL:拓展部件——键盘 lv_keyboard,LVGL,lvgl
  • 预定义的键映射: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:小写字母键。
    LVGL:拓展部件——键盘 lv_keyboard,LVGL,lvgl
  • LV_KEYBOARD_MODE_TEXT_UPPER:大写字母键。
    LVGL:拓展部件——键盘 lv_keyboard,LVGL,lvgl
  • LV_KEYBOARD_MODE_SPECIAL:特殊字符键。
    LVGL:拓展部件——键盘 lv_keyboard,LVGL,lvgl
  • LV_KEYBOARD_MODE_NUMBER:数字、正负号(+/-)和小数点。
    LVGL:拓展部件——键盘 lv_keyboard,LVGL,lvgl
  • 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);

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

LVGL:拓展部件——键盘 lv_keyboard,LVGL,lvgl

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

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

LVGL:拓展部件——键盘 lv_keyboard,LVGL,lvgl

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

LVGL:拓展部件——键盘 lv_keyboard,LVGL,lvgl

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

LVGL:拓展部件——键盘 lv_keyboard,LVGL,lvgl

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

LVGL:拓展部件——键盘 lv_keyboard,LVGL,lvgl

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

#define LV_KB_BTN(width) LV_BTNMATRIX_CTRL_POPOVER | width

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

LVGL:拓展部件——键盘 lv_keyboard,LVGL,lvgl

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)的形式显示按钮提示框。文章来源地址https://www.toymoban.com/news/detail-841663.html

到了这里,关于LVGL:拓展部件——键盘 lv_keyboard的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • LVGL源码分析(1):lv_ll链表的实现

    在LVGL中难免需要用到链表:group中的对象需要用链表来存储,这样可以切换对象的焦点;再比如LVGL内部的定时器,多个定时器也是用链表进行存储的。这篇文章就来分析一下LVGL中链表的源码。 对于链表来说,肯定有一个头指针和一个尾指针,在LVGL中,链表的数据结构如下:

    2024年02月13日
    浏览(7)
  • LVGL core group焦点分组管理(lv_group.c)

    更多源码分析请访问: LVGL 源码分析大全

    2024年02月09日
    浏览(10)
  • LVGL misc area 方块区域通用函数(lv_area.c)

    更多源码分析请访问: LVGL 源码分析大全

    2024年02月07日
    浏览(10)
  • LVGL——文本区域与键盘

    目录 一、文本区域 1、部件组成 2、部件操作 1、创建 2、添加文本 3、光标设置 4、删除文本 5、设置模式 6、限制输入 7、设置占位符 8、获取文本 9、比对文本内容 二、键盘 1、部件组成 2、部件操作 1、创建 2、关联文本框 3、设置按键弹窗 4、设置键盘类型 三、项目案例 主

    2024年04月15日
    浏览(13)
  • LVGL学习笔记 28 - 键盘keyboard

    LVGL学习笔记 28 - 键盘keyboard

    目录 1. 设置关联文本框 2. 设置模式 2.1 LV_KEYBOARD_MODE_TEXT_LOWER 2.2 LV_KEYBOARD_MODE_TEXT_UPPER 2.3 LV_KEYBOARD_MODE_SPECIAL 2.4 LV_KEYBOARD_MODE_NUMBER 2.5 LV_KEYBOARD_MODE_USER_1 ~ LV_KEYBOARD_MODE_USER_4 3. 使能弹窗模式 4. 更改按键布局 5. 事件 键盘是一个特殊的按键矩阵,自身实现了按键(map)映射和其他

    2024年02月13日
    浏览(9)
  • LINUX LVGL 使用键盘方向键选择控件

    1.1: 比如屏幕上有按钮 button1 和button2 通过创建一个组 group 就可以实现选中按键1或者按键2 新建一个组,放入按键的代码,我是写在ui.c 里面创建组件的地方那儿 1.2: 打开宏定义支持键盘功能 1.3: 新建一个输入设备,注册读取键盘的回调函数, 在main.c的 hal_init 函数里面修改 1.4

    2024年02月15日
    浏览(8)
  • 合宙Air724UG LuatOS-Air LVGL API控件-键盘 (Keyboard)

    合宙Air724UG LuatOS-Air LVGL API控件-键盘 (Keyboard)

    键盘 (Keyboard) LVGL 可以添加触摸键盘,但是很明显,使用触摸键盘的话必须要使用触摸的输入方式,否则无法驱动键盘。 通过  keyboard_create  可以创建键盘,实际上只要这一句就可在界面上显示键盘了。很难得的是,键盘没有复制对象, lvgl.keyboard_create  只需要传入一个参数

    2024年02月09日
    浏览(16)
  • [oeasy]python0081_[趣味拓展]ESC键进化历史_键盘演化过程_ANSI_控制序列_转义序列_CSI

    [oeasy]python0081_[趣味拓展]ESC键进化历史_键盘演化过程_ANSI_控制序列_转义序列_CSI

    上次了解了 新的转义模式 \\033 逃逸控制字符 escape 这个字符 让字符串 退出标准输出流 进行控制信息的设置 可以设置 光标输出的位置 ASR33中的ALT MODE 是 今天的ESC键吗????🤔 查询文档 http://bitsavers.org/communications/teletype/33/310B_Vol_1_33_Teletypewriter_Sets_Technical_Manual_Sep74.pdf 最开

    2024年02月12日
    浏览(12)
  • RustGUI学习(iced)之小部件(一):如何使用按钮和文本标签部件

    RustGUI学习(iced)之小部件(一):如何使用按钮和文本标签部件

    前言 本专栏是学习Rust的GUI库iced的合集,将介绍iced涉及的各个小部件分别介绍,最后会汇总为一个总的程序。 iced是RustGUI中比较强大的一个,目前处于发展中(即版本可能会改变),本专栏基于版本0.12.1. 概述 这是本专栏的第一篇,主要讲述按钮(button)和文本标签(text)

    2024年04月25日
    浏览(41)
  • Linux——lv逻辑卷、扩容

    Linux——lv逻辑卷、扩容

    1.1.概念及优点、缺点 概念:Linux 下对硬盘分区的一种管理机制,适合于管理大存储设备,并允许用户动态调整文件系统的大小。 LVM 是 Logical Volume Manager 的简称,译为中文就是逻辑卷管理。它是 Linux 下对硬盘分区的一种管理机制。LVM 适合于管理大存储设备,并允许用户动态

    2024年02月04日
    浏览(9)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包