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)映射和其他功能。

lv_obj_t* kb = lv_keyboard_create(lv_scr_act());
lv_obj_set_align(kb, LV_ALIGN_CENTER);

键盘默认是铺满当前页面的,可以通过lv_obj_set_size设置大小。

1. 设置关联文本框

void lv_keyboard_set_textarea(lv_obj_t * obj, lv_obj_t * ta)

参数ta是文本框的句柄。

lv_obj_set_size(kb, 400, 200);
lv_obj_t* tx = lv_textarea_create(lv_scr_act());
lv_obj_align(tx, LV_ALIGN_CENTER, 0, -160);
lv_keyboard_set_textarea(kb, tx);

2. 设置模式

void lv_keyboard_set_mode(lv_obj_t * obj, lv_keyboard_mode_t mode)

支持的模式有:

2.1 LV_KEYBOARD_MODE_TEXT_LOWER

显示小写字母,默认的情况。

2.2 LV_KEYBOARD_MODE_TEXT_UPPER

显示大写字母,包括键盘和文本框显示。

lv_keyboard_set_mode(kb, LV_KEYBOARD_MODE_TEXT_UPPER);

2.3 LV_KEYBOARD_MODE_SPECIAL

显示特殊字符。

lv_keyboard_set_mode(kb, LV_KEYBOARD_MODE_SPECIAL);

2.4 LV_KEYBOARD_MODE_NUMBER

显示数字。

 lv_keyboard_set_mode(kb, LV_KEYBOARD_MODE_NUMBER);

2.5 LV_KEYBOARD_MODE_USER_1 ~ LV_KEYBOARD_MODE_USER_4

用户自定义模式。这4个用户模式并没有实现,需要自己改lv_keyboard.c,默认是和小写模式一样。以LV_KEYBOARD_MODE_USER_1为例,增加一个游戏手柄的键盘。显示的效果如下:

在static const char * * kb_map[9]前增加数组:

static const char* const default_kb_map_joystick[] = {LV_SYMBOL_SETTINGS, LV_SYMBOL_OK, "\n"," ", LV_SYMBOL_UP, " ", "\n",LV_SYMBOL_LEFT, LV_SYMBOL_RIGHT, "A", "B","\n"," ", LV_SYMBOL_DOWN, " ", ""
};

数组每个变量表示一个按键上的显示字符串,用“\n”表示换行, “”表示结束。把这个数组替换到kb_map数组中 

static const char * * kb_map[9] = {(const char * *)default_kb_map_lc,(const char * *)default_kb_map_uc,(const char * *)default_kb_map_spec,(const char * *)default_kb_map_num,(const char * *)default_kb_map_joystick,(const char * *)default_kb_map_lc,(const char * *)default_kb_map_lc,(const char * *)default_kb_map_lc,(const char * *)NULL,
};

另外再增加一个数组default_kb_ctrl_joystick_map来布局按键的大小。

static const lv_btnmatrix_ctrl_t default_kb_ctrl_joystick_map[] = {1, 1,LV_BTNMATRIX_CTRL_HIDDEN | 1, 2, LV_BTNMATRIX_CTRL_HIDDEN | 5, 1, 1, 1, 1,LV_BTNMATRIX_CTRL_HIDDEN | 1, 2, LV_BTNMATRIX_CTRL_HIDDEN | 5
};

每个数组成员是一个16位的变量,低3位表示按键的宽度比例,例如第一行2个按键,取值1,1表示这2个按键在这一行是占据这一行的比例是50%:50%,其他位表示按键的属性,具体可以参考lv_btnmatrix_ctrl_t的定义。同样,添加到数组kb_ctrl中。

static const lv_btnmatrix_ctrl_t * kb_ctrl[9] = {default_kb_ctrl_lc_map,default_kb_ctrl_uc_map,default_kb_ctrl_spec_map,default_kb_ctrl_num_map,default_kb_ctrl_joystick_map,default_kb_ctrl_lc_map,default_kb_ctrl_lc_map,default_kb_ctrl_lc_map,NULL,
};

这个键盘可以不需要text,所以去掉文本框的设置,显示效果如上图。

    lv_obj_t* kb = lv_keyboard_create(lv_scr_act());lv_obj_set_align(kb, LV_ALIGN_CENTER);lv_obj_set_size(kb, 400, 200);//lv_obj_t* tx = lv_textarea_create(lv_scr_act());//lv_obj_align(tx, LV_ALIGN_CENTER, 0, -160);//lv_keyboard_set_textarea(kb, tx);lv_keyboard_set_mode(kb, LV_KEYBOARD_MODE_USER_1);

3. 使能弹窗模式

void lv_keyboard_set_popovers(lv_obj_t * obj, bool en)

en为TRUE时表示使能弹窗模式,注意这种模式必须按键的属性有LV_BTNMATRIX_CTRL_POPOVER,例如上例中游戏手柄中的设置属性就没有,使能后也不会看到任何效果。

4. 更改按键布局

功能和用户模式类似,通过函数lv_keyboard_set_map改变按键布局。

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

后面2个参数就是之前用户模式对应的数组。

lv_keyboard_set_map(kb, LV_KEYBOARD_MODE_TEXT_LOWER, (const char**)default_kb_map_joystick, default_kb_ctrl_joystick_map);

设置后显示效果与之前的方式一样。

5. 事件

键盘有一个默认的事件lv_keyboard_def_event_cb处理按键行为结果。

当按键的字符串为“abc”时表示切换到小写模式:

if(strcmp(txt, "abc") == 0) {keyboard->mode = LV_KEYBOARD_MODE_TEXT_LOWER;lv_btnmatrix_set_map(obj, kb_map[LV_KEYBOARD_MODE_TEXT_LOWER]);lv_keyboard_update_ctrl_map(obj);return;
}

同理,“ABC”表示切换到大写模式,“1#”表示切换到特殊字符模式。

默认事件发送了LV_EVENT_CANCEL、LV_EVENT_READY事件,用户可以利用这2个事件完成字符串的输入。例如LV_EVENT_CANCEL事件:

static void kbClear_cb(lv_event_t* event)
{lv_keyboard_t* kb = (lv_keyboard_t*)event->target;lv_textarea_set_text(kb->ta, "");
}lv_obj_add_event_cb(kb, kbClear_cb, LV_EVENT_CANCEL, NULL);

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

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

相关文章

【el-image图片查看时 样式穿透表格问题】

element-ui el-image图片查看 样式混乱 解决方式 ::v-deep(.el-table__cell) {position: static !important; // 解决el-image 和 el-table冲突层级冲突问题 }加个样式即可

JavaScript、TypeScript、ES5、ES6之间的联系和区别

ECMAScript: 一个由 ECMA International 进行标准化,TC39 委员会进行监督的语言。通常用于指代标准本身。JavaScript: ECMAScript 标准的各种实现的最常用称呼。这个术语并不局限于某个特定版本的 ECMAScript 规范,并且可能被用于…

大数据扫盲(1): 数据仓库与ETL的关系及ETL工具推荐

在数字化时代,数据成为了企业决策的关键支持。然而,随着数据不断增长,有效地管理和利用这些数据变得至关重要。数据仓库和ETL工具作为数据管理和分析的核心,将帮助企业从庞杂的数据中提取有价值信息。 一、ETL是什么? …

Java的switch语句块

说明 Java的switch语句块可以用于多个分支的判断执行。每个case分支执行完后,要么退出方法体(用return语句)、要么退出switch语句块(用break语句)、要么继续往下执行。但如果一个case执行完后,要继续执行下…

在 Android 上使用机器学习套件检测人脸

须知事项 此 API 需要 Android API 级别 19 或更高级别。确保应用的 build 文件使用的 minSdkVersion 值不小于 19。 请务必在您的项目级 build.gradle 文件中的 buildscript 和 allprojects 部分添加 Google 的 Maven 代码库。 将 Android 版机器学习套件库的依赖项添加到模…

Linux平台下搭建GB28181服务器(WVP+ZLMediakit)

文章目录 什么是GB28181平台依赖项搭建步骤配置Redis和MySQL配置ZLMediakit配置WVP 使用效果封装成Docker镜像 什么是GB28181 GB28181(国标28181),全称为《中华人民共和国公共安全视频监控联网系统技术要求》,是中国国家标准委员会发布的一个针对公共安…

springboot+mybatis+mybatis-plus对crud项目进行改进

springbootmybatis实现简单的增、删、查、改https://blog.csdn.net/heyl163_/article/details/132197201上一篇文章,已经详细地介绍了怎么通过springboot项目整合mybatis实现简单的数据库表的增删改查功能,是最简单的springboot项目的结构。所以有很多问…

易服客工作室:如何在WordPress网站中举办虚拟活动

您是否正在寻找举办和管理虚拟活动的最佳方式? 也许您想在线举行下一次会议或举办有关您的产品和服务的网络研讨会。您可能担心它太贵,或者您没有技术知识来实现​​它。 在本文中,我们将列出您所需的在线服务的所有设备,并教您…

【vue3】基础知识点-setup语法糖

学习vue3&#xff0c;都会从基础知识点学起。了解setup函数&#xff0c;ref&#xff0c;recative&#xff0c;watch、comptued、pinia等如何使用 今天说vue3组合式api&#xff0c;setup函数 在学习过程中一开始接触到的是这样的&#xff0c;定义数据且都要通过return返回 <…

Map中compute、putIfAbsent、computeIfAbsent、merge、computeIfPresent使用

目录 putIfAbsent computeIfAbsent computeIfPresent compute merge putIfAbsent 解释&#xff1a;【不存在则添加】&#xff0c;如果map中没有该key&#xff0c;则直接添加&#xff1b;如果map中已经存在该key&#xff0c;则value保持不变 default V putIfAbsent(K key,…

Linux文件属性与权限管理(可读、可写、可执行)

Linux把所有文件和设备都当作文件来管理&#xff0c;这些文件都在根目录下&#xff0c;同时Linux中的文件名区分大小写。 一、文件属性 使用ls -l命令查看文件详情&#xff1a; 1、每行代表一个文件&#xff0c;每行的第一个字符代表文件类型&#xff0c;linux文件类型包括&am…

百川智能发布首个530亿参数闭源大模型,今年追上GPT-3.5

4月官宣创业&#xff0c;6月15日发布第一款7B开源模型&#xff0c;7月11日发布第二款13B、130亿参数开源模型。 平均保持2个月一个版本发布速度&#xff0c;8月8日&#xff0c;百川智能发布了创业以来的首个530亿参数闭源大模型——Baichuan-53B&#xff08;以下简称“53B”&a…