一、使用例程

二、使用方式

函数的详细说明请看 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

标签智能推荐:

C51单片机引脚图

C51单片机引脚图&nbsp;&nbsp;

一键开关机电路(与上一篇锂电池跟usb供电切换配合观看)

T_DOWN跟PWR_EN两个标签分别连接到单片机的引脚上。SHUT_DOWN为输入,PWR_EN为输出通电时,按下开关KEY插上电源后,单片机并不会直接开机(此时PMOS管g端为高电平,截止),需按下KEY,按下后,g端变为低电平,MOS管道通,单片机启动单片机启动后,设置PWR_EN设置为高电平,则三极管导通,使PMOS管g端为低电平状态,这时,松开key按键也没事了记得设置延迟函数,别让SH

24单片机的结构及引脚是怎样|成都仪器开发提供

SO单片机开发指南之24太阳出来之后,迷茫的雾终将散去,世界也会越来清晰,在技术的路上越走越光明。前面介绍的电路板设计是硬件设计的基础,本节开始正式进入单片机开发的章节,本节在前期的基础上进一步说明单片机的结构和引脚。1、什么是单片机本文主要以51单片机开发为例来介绍。单片机一般是电路板上的一块微处理器芯片,能运行程序,能执行数学计算、逻辑运算等运算,能接收以及输出信号,如数字信号,部分也片载模拟

用STM32CubeMX配置一个工程

用STM32CubeMX软件配置一个STM32F429单片机的Freertos实时操作系统工程操作步骤如下图所示:最后一步点击右上角GENERATECODE生成工程

定时器

一、定义像之前的按键操作都是外部资源而定时器是51单片机芯片内部的资源,我们是看不到的。二、STC89C52定时器资源

工作偶遇小bug

1.下面这个在,调试一个单片机定时器是遇到的,整了一上午才找到,晕!编译器是不认为它是错误的,所以,就你怎么运行都不是你想要结果。2.使用pic单片机过程中,使用AD口时,相应端口的方向必须设为输入,否则是不行的。

1.3. 硬件篇之IO口(视频连接)

单片机控制,实际上就是对单片机的IO口控制,分为三种:如,vcc=5v/R=1k时,i≈3MA。做为指示灯,LED一般工作在1MA左右(亮度适中)。上图中LED的两种接法,对应两种控制方式:方式1,LED负极经由限流电阻接地,单片机IO接LED正极,IO=1时输出高电平,LED上电点亮,IO=0时输出低电平,LED两端均为低电平熄灭。LED点亮时,电流是从单片机流出的,称为拉电流。方式2,LED负

单片机 Arduino 芯片

sp;Arduino的开发一般是一套以AVR单片机为核心控制器的硬件(开发板),还有配套他们的开发环境(软件)ArduinoIDE。&nbsp;简单来说呢就是arduino是对单片机的二次封装,所有外设、模块接口都是现成的,你只需要懂C语言+各种调库就能轻松实现产品功能,不需要关心硬件原理,适合小白快速上手。arduino更偏向于走纯软件路线的同学,由这个东西来熟悉c语言是怎么控制硬件的。通过ar

嵌入式系列

1.有没有什么解析器(c或js)之类的能跑在单片机上,STM32的单片机。----------都有啊,不过没用,没有实际意义。--------=micropython,elua,你跑java都可以。Espruino这个是javascript版本的。

Arduino单片机Proteus仿真

ino单片机项目代写,价格从优,QQ:1973881309,微信:17634551306。&nbsp;&nbsp;&nbsp;第2步:点击NewProject第3步:设置工程【1】设置工程路径;【2】选择开发板;【3】选择ArduinoMEGA2560【4】选择完成第4步,工程建立完成&nbsp;第5步:打开arduinoIDE第6步:设置编译环境在ArduinoIDE的“工具”工具栏中设置设置开