一、使用例程

二、使用方式

函数的详细说明请看 lv_keyboard.h 文件

  1. 创建对象

    lv_obj_t * lv_keyboard_create(lv_obj_t * parent);
    
    lv_obj_t * kb = lv_keyboard_create(lv_scr_act());
  2. 设置模式

    void lv_keyboard_set_mode(lv_obj_t * kb, lv_keyboard_mode_t mode);
    • LV_KEYBOARD_MODE_TEXT_LOWER - 显示小写字母
    • LV_KEYBOARD_MODE_TEXT_UPPER - 显示大写字母
    • LV_KEYBOARD_MODE_TEXT_SPECIAL - 显示特殊字符
    • LV_KEYBOARD_MODE_NUM - 显示数字,+ /-号和小数点。

    注意:默认更多是 LV_KEYBOARD_MODE_TEXT_UPPER 。

  3. 分配文本区域

    void lv_keyboard_set_textarea(lv_obj_t * kb, lv_obj_t * ta);

    将文本输入区与键盘进行关联

  4. 自定义键盘

    typedef uint16_t lv_btnmatrix_ctrl_t;
    
    void lv_keyboard_set_map(lv_obj_t * kb, lv_keyboard_mode_t mode, const char * map[],
    const lv_btnmatrix_ctrl_t ctrl_map[]);

    详细用法见lv_example_keyboard_2()

    注意:以下关键字将具有与原始键盘相同的效果:

    • LV_SYMBOL_OK: 应用.
    • LV_SYMBOL_CLOSE: 关闭.
    • LV_SYMBOL_BACKSPACE: 从左侧删除。
    • LV_SYMBOL_LEFT: 向左移动光标。
    • LV_SYMBOL_RIGHT: 向右移动光标。
    • “ABC”: 加载大写键盘。
    • “abc”: 加载小写键盘。
    • “Enter”: 换行.
  5. 事件

    除了 通用事件 ,键盘还支持以下 特殊事件 :

    • LV_EVENT_VALUE_CHANGED:按下/释放按钮时发送,或长按后重复发送。事件数据设置为按下/释放按钮的ID。
    • LV_EVENT_READY: OK按钮被点击
    • LV_EVENT_CANCEL:关闭按钮被点击

三、程序

#include "lvgl/lvgl.h"

/**
* @brief 文本事件
* @param e 事件对象
*/
static void ta_event_cb(lv_event_t * e)
{
lv_event_code_t code = lv_event_get_code(e); // 获取事件编码
lv_obj_t * ta = lv_event_get_target(e); // 获取文本对象
lv_obj_t * kb = (lv_obj_t *)lv_event_get_user_data(e); // 获取键盘对象
/* 获取文本点击事件 */
if(code == LV_EVENT_CLICKED) {
lv_keyboard_set_textarea(kb, ta); // 将键盘与文本进行关联
lv_obj_clear_flag(kb, LV_OBJ_FLAG_HIDDEN); // 清除键盘的隐身标志,显示键盘
lv_obj_add_state(ta, LV_STATE_FOCUSED); // 将文本框设置为聚焦状态
}
/* 获取文本聚焦事件 */
// if(code == LV_EVENT_FOCUSED) {
// lv_keyboard_set_textarea(kb, ta); // 将键盘与文本进行关联
// lv_obj_clear_flag(kb, LV_OBJ_FLAG_HIDDEN); // 清除键盘的隐身标志,显示键盘 // }
/* 获取文本失去焦点事件 */
if(code == LV_EVENT_DEFOCUSED) {
lv_keyboard_set_textarea(kb, NULL); // 取消键盘的关联
lv_obj_add_flag(kb, LV_OBJ_FLAG_HIDDEN); // 添加键盘隐藏标志,隐藏键盘
}
} /**
* @brief 键盘确认事件
* @param e 事件对象
*/
static void kb_event_cb(lv_event_t * e)
{
lv_obj_t * kb = lv_event_get_target(e); // 获取当前事件对象,也就是键盘对象 lv_obj_t * ta = lv_keyboard_get_textarea(kb); // 获取与键盘绑定的输入缓冲区的对象 lv_keyboard_set_textarea(kb, NULL); // 取消键盘的关联
lv_obj_add_flag(kb, LV_OBJ_FLAG_HIDDEN); // 添加键盘隐藏标志,隐藏键盘 lv_obj_clear_state(ta, LV_STATE_FOCUSED); // 清除文本框的聚焦状态
} /**
* @brief 键盘输入测试案例
*/
void lv_example_keyboard(void)
{
/* 创建一个键盘对象 */
lv_obj_t * kb = lv_keyboard_create(lv_scr_act()); /* 创建一个文本区域,用于键盘输入后的信息 */
lv_obj_t * ta = lv_textarea_create(lv_scr_act());
lv_obj_align(ta, LV_ALIGN_TOP_MID, 0, 10); // 相对位置设置
lv_obj_set_size(ta, lv_pct(90), 80); // 文本框大小
lv_textarea_set_placeholder_text(ta, "Click Enter"); // 文本提示信息
lv_obj_add_state(ta, LV_STATE_DEFAULT); // 设置文本框为默认状态 /* 文本控件的所有事件*/
lv_obj_add_event_cb(ta, ta_event_cb, LV_EVENT_ALL, kb); /* 初始时将键盘隐藏 */
lv_keyboard_set_textarea(kb, NULL); // 未将键盘与输入区绑定
lv_obj_add_flag(kb, LV_OBJ_FLAG_HIDDEN); // 将表示将键盘隐藏 /* 键盘的确认事件 */
lv_obj_add_event_cb(kb, kb_event_cb, LV_EVENT_READY , NULL);
}

注意:从程序中可以看出,文本的输入状态只用聚焦和散焦即可,因为我想在键盘中通过确认按钮对键盘进行隐藏,但是又无法使文本进入散焦状态,存在点击文本时光标不闪烁的问题,所以我采取了点击事件,将文本改为聚焦状态。

如果哪位大佬知道怎么使文本散焦的办法,可否告知一下。

参考文献

LVGL 键盘|极客笔记:<https://deepinout.com/lvgl-tutorials/lvgl-widgets/lvgl-lv_keyboard.html

LVGL 虚拟键盘使用的更多相关文章

  1. Android开发案例 - 自定义虚拟键盘

    所有包含IM功能的App(如微信, 微博, QQ, 支付宝等)都提供了Emoji表情之类的虚拟键盘,  如下图:    本文只着重介绍如何实现输入法键盘和自定义虚拟键盘的流畅切换, 而不介绍如何实现虚 ...

  2. Xamarin的不归路-安卓模拟器启动慢&没有虚拟键盘

    1.启动慢解决方案:参考这篇文章进行配置 http://www.360doc.com/content/13/1002/18/532901_318605525.shtml 2.模拟器没有虚拟键盘解决方案 ...

  3. [原创]cocos2d-x研习录-第三阶 特性之按键与虚拟键盘

    Cocos2D-x引擎支持按键事件,它能检测设备的键盘输入并处理相应的事件.而基于不同操作系统的移动设备,可供用户操作的按键数量和功能都存在差异.   Cocos2D-x使用CCKeypadDeleg ...

  4. 039. asp.netWeb用户控件之七实现具有虚拟键盘的功能的用户控件

    用户控件ascx代码: <%@ Control Language="C#" AutoEventWireup="true" CodeFile="K ...

  5. 关于Android 打开新的Activity 虚拟键盘的弹出与不弹出

    关于Android 打开新的Activity 虚拟键盘的弹出与不弹出 打开Activity 时  在相应的情况 弹出虚拟键盘 或者 隐藏虚拟键盘 会给用户非常好的用户体验 , 实现起来也比较简单 只需 ...

  6. JS虚拟键盘

    由于是触摸屏,所以需要一款JS虚拟键盘.上网找了一个好用的VirtualKeyboard,作了修改. 修改该插件参考的博客文章:http://www.cnblogs.com/xinggong/arch ...

  7. 【小贴士】虚拟键盘与fixed带给移动端的痛!

    前言 今天来公司的主要目的就是研究虚拟键盘与fixed的问题,期间因为同事问起闭包与事件委托(阻止冒泡)相关问题,便穿插了一篇别的: [小贴士]工作中的”闭包“与事件委托的”阻止冒泡“,有兴趣的朋友可 ...

  8. WPF 虚拟键盘

    之前做了一款WPF虚拟键盘,调用Win32的API,可以模拟键盘事件. 现将代码分享如下: 按键布局如下: <Button Name="> <StackPanel Orie ...

  9. 重新想象 Windows 8 Store Apps (49) - 输入: 获取输入设备信息, 虚拟键盘, Tab 导航, Pointer, Tap, Drag, Drop

    [源码下载] 重新想象 Windows 8 Store Apps (49) - 输入: 获取输入设备信息, 虚拟键盘, Tab 导航, Pointer, Tap, Drag, Drop 作者:weba ...

随机推荐

  1. Cisco Packet Tracer Student(思科网络模拟器)模拟集线器和嗅探攻击

    一.集线器简介 集线器是局域网内的基础设备,工作于OSI中的物理层,作用是将接收的信号进行放大再传输,集线器是纯硬件设施,集线器开发之初就没考虑过软件层面的操作,所以不具备像路由器.交换机等设备那样具 ...

  2. Unbuntu VS Code启动时闪退暂时的解决方法

    背景: 刚刚试着更新了操作系统,没更新成功,在下载系统更新的时候brave浏览器消失了,wps消失了,搜狗拼音输入法消失了.更新时,卡在Kernal Offset上,然后长按电源键再重启就好了.但是v ...

  3. C++记录一

    题目一: [描述] 比较两个整数之间的大于.小于.等于.不等于关系. [输入] 输入在一行中给出2个整数a和b. [输出] 分行输出整数a和b之间的大于.小于.等于.不等于关系. [输入示例] 5 3 ...

  4. X86寄存器

    前置知识 x86泛指一系列基于Intel 8086且向后兼容的中央处理器指令集架构.最早的8086处理器于1978年由Intel推出,为16位微处理器. 80X86 包括Intel 8086.8018 ...

  5. day01 Java_基础

    1.类型 int:整数 long:长整数 double:浮点数 char:字符型--单引号只能有一个 boolean:布尔型--真假 string : 字符串--双引号,可以0-多个 2.算数运算符: ...

  6. jdbc 03:注册驱动的方式

    jdbc连接mysql时,注册驱动的方式 package com.examples.jdbc.o3_注册驱动方式; //mysql驱动所在的包 import com.mysql.jdbc.Driver ...

  7. Seata-初体验以及避坑

    Seata是什么 这里引用官方解释 Seata 是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务.Seata 将为用户提供了 AT.TCC.SAGA 和 XA 事务模式,为用 ...

  8. 使用github action发布hexo博客到云服务器

    目录 搭建Hexo博客 安装主题hexo-theme-bamboo 修改博客名称等信息 添加github action发布 1. 在github中创建自己的博客仓库 2. 设置Secrets 3. 在 ...

  9. Java异步记录日志-2022新项目

    一.业务场景 web项目开发中,经常会有的一个操作是记录请求日志,比如记录请求的IP地址,记录请求的路径,记录请求的参数等等. 每个系统都会根据自己的需要来记录一些请求相关的日志.一般会将记录的日志信 ...

  10. SpringBoot 如何集成 MyBatisPlus - SpringBoot 2.7.2实战基础

    SpringBoot 2.7.2 学习系列,本节通过实战内容讲解如何集成 MyBatisPlus 本文在前文的基础上集成 MyBatisPlus,并创建数据库表,实现一个实体简单的 CRUD 接口. ...