LVGL——文本区域与键盘

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

目录

一、文本区域

1、部件组成

2、部件操作

1、创建

2、添加文本

3、光标设置

4、删除文本

5、设置模式

6、限制输入

7、设置占位符

8、获取文本

9、比对文本内容

二、键盘

1、部件组成

2、部件操作

1、创建

2、关联文本框

3、设置按键弹窗

4、设置键盘类型

三、项目案例


一、文本区域

1、部件组成

主体(LV_PART_MAIN

滚动条(LV_PART_SCROLLBAR)

所选文本(LV_PART_SELECTED

光标(LV_PART_CURSOR)

占位符(TEXTAREA_PLACEHOLDER)

2、部件操作

1、创建

lv_obj_t  *ta = lv_textarea_create(parent);

2、添加文本

lv_textarea_add_char(ta, 'A');					/* 添加一个字符到当前光标处 */
lv_textarea_add_text(ta, "BCDEF"); 				/* 添加字符串到当前光标处 */
lv_obj_t *keyboard = lv_keyboard_create(lv_scr_act());	/* 创建键盘部件 */
lv_keyboard_set_textarea(keyboard, ta);			/* 关联键盘和文本区域部件 */

3、光标设置

lv_textarea_set_cursor_pos(ta, 0);				/* 0:最左侧, LV_TEXTAREA_CURSOR_LAST:最右侧 */

4、删除文本

lv_textarea_del_char(ta);							/* 删除光标左侧的一个字符 */
lv_textarea_del_char_forward(ta);					/* 删除光标右侧的一个字符 */

5、设置模式

lv_textarea_set_one_line(ta, true);					/* 单行模式 */
lv_textarea_set_password_mode(ta, true);				/* 密码模式(隐藏输入的内容) */
lv_textarea_set_password_show_time(ta, 100);			/* 密码显示时间 */

6、限制输入

lv_textarea_set_accepted_chars(ta,"0123456789");	 		/* 限制接收的字符 */
lv_textarea_set_max_length(ta,6);			 		/* 限制字符长度 */

7、设置占位符

lv_textarea_set_placeholder_text(ta, "password");	 		/* 提示输入密码 */

8、获取文本

const char *txt = lv_textarea_get_text(ta);				 /* 获取文本框文本 */ 

9、比对文本内容

strcmp(const char *s1,const char *s2);					/* 当s1=s2时,返回0 */

二、键盘

1、部件组成

主体(LV_PART_MAIN

按钮(LV_PART_ITEMS)文章来源地址https://www.toymoban.com/news/detail-852197.html

2、部件操作

1、创建

lv_obj_t  *kb = lv_keyboard_create(parent);

2、关联文本框

lv_obj_t *ta = lv_textarea_create(lv_scr_act());				/* 创建文本区域部件 */
lv_keyboard_set_textarea(kb, ta);						/* 关联键盘和文本区域部件 */

3、设置按键弹窗

lv_keyboard_set_popovers(kb, true);						/* 允许按键弹窗提示 */

4、设置键盘类型

lv_keyboard_set_mode(kb, LV_KEYBOARD_MODE_NUMBER);		/* 数字键盘模式 */

三、项目案例

#include "mygui.h"
#include "lvgl.h"
#include <stdio.h>
#include <stdbool.h>

/* 获取当前活动屏幕的宽高 */
#define scr_act_width() lv_obj_get_width(lv_scr_act())
#define scr_act_height() lv_obj_get_height(lv_scr_act())

static const lv_font_t *font;       /* 定义字体 */

static lv_obj_t *keyboard;          /* 键盘 */
static lv_obj_t *label_name;        /* 用户名正误提示标签 */
static lv_obj_t *label_pass;        /* 密码正误提示标签 */

static void name_event_cb(lv_event_t *e)
{
    lv_event_code_t code = lv_event_get_code(e);            /* 获取事件类型 */
    lv_obj_t *target = lv_event_get_target(e);              /* 获取触发源 */

    if(code == LV_EVENT_FOCUSED)                            /* 事件类型:被聚焦 */
    {
        lv_keyboard_set_textarea(keyboard, target);         /* 关联用户名文本框和键盘 */
    }
    else if(code == LV_EVENT_VALUE_CHANGED)                 /* 事件类型:文本框的内容发生变化 */
    {
        const char *txt = lv_textarea_get_text(target);     /* 获取文本框的文本 */

        if(strcmp(txt,"meng") == 0)                        /* 判断用户名是否正确 */
        {
            lv_label_set_text(label_name, LV_SYMBOL_OK);    /* 用户名正确,显示√ */
        }
        else
        {
            lv_label_set_text(label_name, "");              /* 用户名错误,不提示 */
        }
    }
}

static void pass_event_cb(lv_event_t *e)
{
    lv_event_code_t code = lv_event_get_code(e);            /* 获取事件类型 */
    lv_obj_t *target = lv_event_get_target(e);              /* 获取触发源 */

    if(code == LV_EVENT_FOCUSED)                            /* 事件类型:被聚焦 */
    {
        lv_keyboard_set_textarea(keyboard, target);         /* 关联用户名文本框和键盘 */
    }
    else if(code == LV_EVENT_VALUE_CHANGED)                 /* 事件类型:文本框的内容发生变化 */
    {
        const char *txt = lv_textarea_get_text(target);     /* 获取文本框的文本 */

        if(strcmp(txt,"123456") == 0)                       /* 判断密码是否正确 */
        {
            lv_label_set_text(label_pass, LV_SYMBOL_OK);    /* 密码正确,显示√ */
        }
        else
        {
            lv_label_set_text(label_pass, "");              /* 密码错误,不提示 */
        }
    }
}

void lv_wenbenkeybored(void)
{
    font = &lv_font_montserrat_10;

    /* 用户名文本框 */
    lv_obj_t *textarea_name = lv_textarea_create(lv_scr_act());                                     /* 创建文本框 */
    lv_obj_set_width(textarea_name, scr_act_width()/2);                                             /* 设置宽度 */
    lv_obj_set_style_text_font(textarea_name, font, LV_PART_MAIN);                                  /* 设置字体 */
    lv_obj_align(textarea_name, LV_ALIGN_CENTER, 0, -scr_act_height()/3 );                          /* 设置位置 */
    lv_textarea_set_one_line(textarea_name, true);                                                  /* 设置单行模式 */
    lv_textarea_set_max_length(textarea_name, 6);                                                   /* 设置输入字符的最大长度 */
    lv_textarea_set_placeholder_text(textarea_name, "user name");                                   /* 设置占位符 */
    lv_obj_add_event_cb(textarea_name, name_event_cb, LV_EVENT_ALL, NULL);                          /* 添加文本框事件回调 */

    /* 用户名正误提示标签 */
    label_name = lv_label_create(lv_scr_act());                                                     /* 创建标签 */
    lv_label_set_text(label_name, "");                                                              /* 默认不提示 */
    lv_obj_set_style_text_font(label_name, font, LV_PART_MAIN);                                     /* 设置字体 */
    lv_obj_align_to(label_name, textarea_name, LV_ALIGN_OUT_RIGHT_MID, 5, 0);                       /* 设置位置 */

    /* 密码文本框 */
    lv_obj_t *textarea_pass = lv_textarea_create(lv_scr_act());                                     /* 创建文本框 */
    lv_obj_set_width(textarea_pass, scr_act_width()/2);                                             /* 设置宽度 */
    lv_obj_set_style_text_font(textarea_pass, font, LV_PART_MAIN);                                  /* 设置字体 */
    lv_obj_align_to(textarea_pass, textarea_name, LV_ALIGN_OUT_BOTTOM_MID, 0, scr_act_height()/20); /* 设置位置 */
    lv_textarea_set_one_line(textarea_pass, true);                                                  /* 设置单行模式 */
    lv_textarea_set_password_mode(textarea_pass, true);                                             /* 设置密码模式 */
    lv_textarea_set_password_show_time(textarea_pass, 1000);                                        /* 设置密码显示时间 */
    lv_textarea_set_max_length(textarea_pass, 8);                                                   /* 设置输入字符的最大长度 */
    lv_textarea_set_placeholder_text(textarea_pass, "password");                                    /* 设置占位符 */
    lv_obj_add_event_cb(textarea_pass, pass_event_cb, LV_EVENT_ALL, NULL);                          /* 添加文本框事件回调 */

    /* 密码正误提示标签 */
    label_pass = lv_label_create(lv_scr_act());                                                     /* 创建标签 */
    lv_label_set_text(label_pass, "");                                                              /* 默认不提示 */
    lv_obj_set_style_text_font(label_pass, font, LV_PART_MAIN);                                     /* 设置字体 */
    lv_obj_align_to(label_pass, textarea_pass, LV_ALIGN_OUT_RIGHT_MID, 5, 0);                       /* 设置位置 */

    /* 键盘 */
    keyboard = lv_keyboard_create(lv_scr_act());                                                    /* 创建键盘 */
    lv_obj_set_size(keyboard, scr_act_width(), scr_act_height()/2);                                 /* 设置大小 */
}


void my_gui(void)
{
    lv_wenbenkeybored();
}

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

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

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

相关文章

  • LVGL学习笔记(二):从0到1移植LVGL8.1到STM32平台上(完结篇)

    目录 一:TFT-LCD屏触摸 二:STM32CubeMX配置 三:FT5206触摸芯片驱动代码移植 四:LVGL 移植 4.1 源码下载 4.2 代码移植  4.3 添加源码至工程 4.4 指定头文件路径 4.5 设置编译参数  4.6 修改LVGL源文件   4.7 修改显示驱动接口    4.8 修改输入设备驱动接口  五:下载验证  六:工

    2024年02月03日
    浏览(35)
  • LVGL触摸移植——stm32野火F103

    目录 系列文章目录 章目录 目标 一、认识端口文件 二、使能 lv_port_indev.c  三、接口函数 1.输入设备初始化 四、Main函数 五、过程中的疑难杂症 1.内存不足 2、LCD白屏 五、效果 总结 在显示的基础上添加触摸输入 提示:以下是本篇文章正文内容,下面案例可供参考 这两个是

    2024年02月11日
    浏览(35)
  • 【LVGL】STM32F103ZET6——LVGL_GUI_GUIDER移植过程成功

    STM32F103ZET6——LVGL_GUI_GUIDER移植过程 STM32F103ZET6——LVGL_GUI_GUIDER移植过程 使用工具: 1.LVGL库8.02 2.GUI_GUIDER 3.keil5 设计出来的总体是这样 提示:以下是本篇文章正文内容,下面案例可供参考 这部分有很多大佬已经写的很成熟了,我就不赘述了 安装包在这里硬件资源 右上角可将

    2024年02月12日
    浏览(41)
  • LVGL与STM32的理解(基于正点原子资料)

            LVGL能让你在嵌入式平台(stm32)相对容易的搞出比较绚丽的UI交互效果。也就是在LVGL制定的游戏规则下去开发UI界面,活好事少。为此硬件设备需要做一些适配,以达到:LVGL能够使用STM32的硬件资源;同时,在STM32编程后,效果又能落地到LVGL。(以下截图来是正点原

    2024年01月23日
    浏览(35)
  • STM32移植LVGL+旋转编码器接口对接

    写在前面:本菜鸟结合了许多大佬的文章,成功实现了基于LVGL的GUI设计,小开心~浅浅记录一下!~ 本文以单片机STM32F103VET6为核心,利用ST7796芯片驱动分辨率为480*320的LCD液晶屏模块,移植LVGL,对接显示接口,对接外部接口——旋转编码器,完成以上两步,就可以实现LVGL的显

    2024年02月10日
    浏览(35)
  • 采用一种比较粗暴的方法解决lvgl切换screen时候造成的卡死问题/LVGL/stm32/内存

    最近有个项目在做基于stm32h7的交互界面制作,大概需要通过lvgl图形库做11个界面加上一堆控件(可以看一下下面的图,只能说真不少),然后就出现了烧录程序后,就会出现白屏(大概率就是卡死了),一开始想简化一下页面,注释了几个(治标不治本,所以再找了别的方法

    2024年03月14日
    浏览(71)
  • STM32F407使用DMA加速刷新LVGL

    本人使用国产的实时操作系统RT-thread,屏幕使用的TFTLCD,屏幕IC是LIL9341 这里就不讲移植了,如果需要,请评论,后面出; 前提:移植好LCD,移植好LVGL(不适用DMA能正常显示) 使用STM32Cubemax配置DMA 上图中, Burst Size 的具体配置根据芯片参考手册来选择,如果要用FIFO的话就需

    2024年01月25日
    浏览(44)
  • SquareLine studio设计LVGL工程,移植到stm32的过程

            本文主要是给大家介绍一下如何将SquareLine studio设计的LVGL工程,移植到stm32的LCD液晶显示屏上。 本文做好的移植模板在这(移植模板),模板可以直接在正点原子stm32f103ze系列板子上运行测试。显示屏使用的是4.3寸屏幕(像素800*480)         ·以我自己设计的LVGL工程

    2024年02月03日
    浏览(58)
  • STM32 RGB屏幕驱动+LVGL移植 从底层到应用小项目

    项目使用正点原子STM32F767阿波罗开发板+IPS TFT-LCD屏幕(非正点原子屏幕)进行开发,应用层移植轻量级GUI库LVGL实现列表按键点击,切换,显示当前内部工作电压功能。重点在于对于RGB屏幕驱动普适性的学习和LVGL开发的理解。希望我实习期间的项目学习过程能对大家有所帮助

    2024年02月15日
    浏览(30)
  • STM32F4+FreeRTOS+LVGL实现嵌入式快速开发(缝合怪)

    极速进行项目开发,只需要懂一款芯片架构+一个操作系统+一个GUI。各种部件程序全靠抄 ,成为究极缝合怪。本文用stm32f407+FreeRTOS+lvgl演示一些demo。 原文链接:STM32F4+FreeRTOS+LVGL实现快速开发(缝合怪) lvgl官方的音乐播放器demo: 百问网的2048小游戏: STM32F407这款芯片就不多介绍

    2024年02月08日
    浏览(39)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包