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)的形式显示按钮提示框。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/763156.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vue 性能不给力?这些优化技巧帮你轻松搞定!

结合lighthouse查看各项数据,不断进行性能优化,可以从代码、项目打包、项目部署这三个层面来优化 代码层面 1、v-if和v-show区分使用 v-if(惰性的)用的条件判断,是惰性的,false的话初始不会渲染&#xf…

oracle迁移至gbase,sql问题总结(完善中)

最近再做国产化适配,需要把oracle里面的数据迁移至gbase 8a库中,这边把迁移过程中遇到的sql问题,记录下,现在仅迁移了一部分,后续会继续完善 1.ORACLE里面的NVL2函数在8a中不支持,可换成DECODE函数 2.表别…

二鼠打洞问题

文章目录 二鼠打洞问题测试说明Python求解 二鼠打洞问题 《九章算术》的“盈不足篇”里有一个很有意思的老鼠打洞问题。原文是这么说的:今有垣厚十尺,两鼠对穿。大鼠日一尺,小鼠亦一尺。大鼠日自倍,小鼠日自半。问:何…

此站点正在尝试打开 ,chrome/edge 允许http网站打开url schema

正常https链接会有首次允许选项 但http没有,每次都会弹出,非常烦人。 Chrome / Edge 配置 地址栏输入 chrome://flags/搜索Insecure origins treated as secure, 配置允许网站,需要协议和端口再次跳转会显示始终允许选项

关于5.x版本的Neo4j与py2neo的访问技巧

先说结果。 Neo4j是可以使用py2neo来操作的。而且网上搜到的教程和方法里,首推的http连接方法可能并不是最好的,应该用 bolt 方法可能更好。 对于大多数使用 py2neo 与 Neo4j 数据库进行交互的应用程序来说,建议使用 Bolt 协议(即…

kafka面试篇

消息队列的作用:异步、削峰填谷、解耦 高可用,几乎所有相关的开源软件都支持,满足大多数的应用场景,尤其是大数据和流计算领域, kafka高效,可伸缩,消息持久化。支持分区、副本和容错。 对批处理…

C# 属性

C# 属性 访问器(Accessors) using System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks;namespace ConsoleApp2 {class Student{private str…

Linux 常用命令 chgrp

Linux 常用命令 chgrp 作用 用于更改文件或目录的所属用户组。只有文件的所有者或超级用户(root)可以使用 chgrp 命令来更改文件的所属用户组。在使用 chgrp 命令时需要谨慎操作,确保对文件和目录进行正确的用户组更改,以避免意…

linux C/C++ 捕获 SIGSEGV 段错误信号

程序运行遇到core dumped崩溃是常见现象,有时候,我们希望程序在崩溃的时候,先做点其他操作再崩溃,比如记录崩溃时刻的堆栈信息,或是提前释放一些硬件资源等等,那么就需要让程序捕获错误信号 下面是一个捕获…

第十五届蓝桥杯模拟考试III_物联网设计与开发官方代码分析

目录 前言:显示界面部分:页面切换:数值的轮回调整:传递数据: 前言: 这次模拟的效果很不好。85分,4h的限时我花了两天完成,这个时间是远远超出要求的,而且最后还只拿到56分&#xff0…

基于electron29版本桌面应用app开发例子

基于electron29版本桌面应用app开发例子 htmljsnode.js 开发模式 生成package.json文件: yarn init --yes 或 npm init --yes 运行打包 yarn dev yarn build # electron与electron-builder版本不兼容问题处理办法: 在package.json中scripts中添加 “…

解决在 yolov8 训练自己的数据集时,matplotlib 中文乱码问题【woodwhales.cn】

为了更好的阅读体验,建议移步至笔者的博客阅读:解决在 yolov8 训练自己的数据集时,matplotlib 中文乱码问题 在 yolov8 训练自己的数据集时,如果 class 字典使用了中文,则在训练过程中会出现形如下面的警告&#xff1a…

面试官:(...)扩展运算符是深拷贝吗?

一、情景再现 金三银四,最近找工作的小伙伴是扑面而来,这其中少不了我的好朋友张某某同学,我们‘相依为命’,我经常开导他,这不最近的一次面试中他就遇到这样一个考题: 面试官:(...&…

亚远景科技-什么是Hardware SPICE(HW SPICE)硬件过程改进与能力判定模型 ?

intacs硬件SPICE(Software Process Improvement and Capability Determination for Hardware Engineering)是一种针对硬件工程领域的过程改进和能力评估模型,旨在支持电子硬件开发。它是基于SPICE(软件过程改进和能力评估&#xf…

【NumPy数值计算基础】NumPy数组的基本操作

目录 一、数组的索引和切片(一)数组的索引(二)数组的切片 二、数组的变换(一)数组转置(二)数组重塑(三)数组合并(四)数组分割 三、数组…

力扣242. 有效的字母异位词

思路:字母相互抵消的思路,本题字符串中只包含小写字母26位,那就新建record数组int[26],下标0-25,代表小写字母a-z, 需要通过 某字符减a 来达到这一目的; class Solution {public boolean isAnagram(String…

ginblog博客系统/golang+vue

ginblog博客系统 前台: 后台: Gitee的项目地址,点击进入下载 注意: 数据库文件导入在model里面,直接导入即可。 admin和front前后台系统记住修改https里的地址为自己的IP地址: front同上。

直播弹幕系统设计

设计一个直播弹幕系统需要考虑到系统的实时性、可扩展性、高可用性以及数据持久性等多个方面。 1. 功能需求分析 实时性:弹幕消息需要尽可能即时地显示在直播视频上。高吞吐量:系统需要处理大量用户同时发送的弹幕。数据的持久化:如果需要保…

医学预测变量筛选的几种方法(R语言版)

医学预测变量筛选的几种方法(R语言版) 预测变量筛选是机器学习中的一个重要环节,它可以帮助我们识别出与目标变量最相关的特征,从而提高模型的预测精度和解释性。在医学领域,预测变量筛选可以用于疾病诊断、预后评估、…

两数之和(python)

官方题目描述: 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现…