当前位置: 首页 > news >正文

【lvgl9】使用keyboard和textarea实现密码数字输入界面

lvgl9使用keyboard和textarea实现类似于密码数字输入界面

#define DEFAULT_PASSWORD "123456"lv_obj_t * current_password_cont = NULL;
lv_obj_t * pwd_ta = NULL;void remove_password_cont_background(void)
{if (pwd_ta != NULL) {lv_obj_del(pwd_ta);pwd_ta = NULL;}if (current_password_cont != NULL) {lv_obj_del(current_password_cont);current_password_cont = NULL;}
}static void async_remove_cont(void *arg) {remove_password_cont_background();
}static void kb_click_event(lv_event_t * e)
{lv_obj_t * kb = lv_event_get_target(e);uint16_t btn_id = lv_keyboard_get_selected_button(kb);const char * txt = lv_keyboard_get_button_text(kb, btn_id);if (txt && strcmp(txt, LV_SYMBOL_OK) == 0) {const char * input = lv_textarea_get_text(pwd_ta);printf("input:%s\r\n", input);size_t len = strlen(input);lv_obj_t * mbox = lv_msgbox_create(lv_scr_act());lv_msgbox_add_title(mbox, "Limit");lv_msgbox_add_close_button(mbox);lv_obj_set_style_text_font(mbox, &lv_font_montserrat_22, LV_PART_MAIN);lv_obj_set_size(mbox, 300, 110);lv_obj_center(mbox);if (len < 6) {lv_msgbox_add_text(mbox, "Please enter a password of length 6");return;}if (strcmp(input, DEFAULT_PASSWORD) == 0) {if (mbox != NULL) {lv_obj_del(mbox);mbox = NULL;}lv_async_call(async_remove_cont, NULL);} else {lv_msgbox_add_text(mbox, "Password error, please retry");}}
}static const char* kb_map[] = {"1", "2", "3", "\n","4", "5", "6", "\n","7", "8", "9", "\n","0", LV_SYMBOL_BACKSPACE,LV_SYMBOL_OK,NULL
};static const lv_buttonmatrix_ctrl_t kb_ctrl[] = {LV_BTNMATRIX_CTRL_NO_REPEAT, LV_BTNMATRIX_CTRL_NO_REPEAT, LV_BTNMATRIX_CTRL_NO_REPEAT,LV_BTNMATRIX_CTRL_NO_REPEAT, LV_BTNMATRIX_CTRL_NO_REPEAT, LV_BTNMATRIX_CTRL_NO_REPEAT,LV_BTNMATRIX_CTRL_NO_REPEAT, LV_BTNMATRIX_CTRL_NO_REPEAT, LV_BTNMATRIX_CTRL_NO_REPEAT,LV_BTNMATRIX_CTRL_NO_REPEAT, LV_BTNMATRIX_CTRL_NO_REPEAT, LV_BTNMATRIX_CTRL_NO_REPEAT
};void create_password_cont(void)
{if(current_password_cont != NULL) {remove_password_cont_background();}current_password_cont = lv_obj_create(lv_scr_act());lv_obj_set_style_bg_color(current_password_cont, lv_color_black(), LV_PART_MAIN|LV_STATE_DEFAULT);lv_obj_set_style_bg_opa(current_password_cont, LV_OPA_90, LV_PART_MAIN);lv_obj_set_scrollbar_mode(current_password_cont, LV_SCROLLBAR_MODE_OFF);lv_obj_set_style_radius(current_password_cont, 0, LV_PART_MAIN);lv_obj_set_style_border_opa(current_password_cont, 0, LV_PART_MAIN);lv_obj_set_size(current_password_cont, LV_PCT(100), LV_PCT(100));lv_obj_t *msg_label = lv_label_create(current_password_cont);lv_label_set_text(msg_label, "Please enter password");lv_obj_set_style_text_color(msg_label, lv_color_white(), LV_PART_MAIN|LV_STATE_DEFAULT);lv_obj_set_style_text_font(msg_label, &lv_font_montserrat_24, LV_PART_MAIN|LV_STATE_DEFAULT);lv_obj_align(msg_label, LV_ALIGN_TOP_MID, 0, 20);pwd_ta = lv_textarea_create(current_password_cont);lv_obj_set_size(pwd_ta, 100, 80);lv_obj_align(pwd_ta, LV_ALIGN_TOP_MID, 0, 80);lv_textarea_set_one_line(pwd_ta, true);lv_textarea_set_max_length(pwd_ta, 6);lv_textarea_set_password_mode(pwd_ta, true);lv_textarea_set_text(pwd_ta, "");lv_obj_t* kb = lv_keyboard_create(current_password_cont);lv_obj_set_size(kb, LV_PCT(100), LV_PCT(60));lv_obj_set_style_bg_color(kb, lv_color_black(), LV_PART_MAIN|LV_STATE_DEFAULT);lv_obj_set_style_bg_color(kb, lv_color_hex(0x404040), LV_PART_ITEMS | LV_STATE_DEFAULT);lv_obj_set_style_text_color(kb, lv_color_white(), LV_PART_ITEMS | LV_STATE_DEFAULT);lv_obj_set_style_text_font(kb, &lv_font_montserrat_24, LV_PART_ITEMS | LV_STATE_DEFAULT);lv_keyboard_set_map(kb, LV_KEYBOARD_MODE_USER_1, kb_map, kb_ctrl);lv_keyboard_set_mode(kb, LV_KEYBOARD_MODE_USER_1);lv_keyboard_set_textarea(kb, pwd_ta);lv_obj_add_event_cb(kb, kb_click_event, LV_EVENT_VALUE_CHANGED, NULL);lv_obj_move_foreground(current_password_cont);
}
http://www.xdnf.cn/news/551665.html

相关文章:

  • Git 克隆子分支
  • 本地ip如何映射到外网?借助端口映射软件把内网地址给别人用
  • Jetson Agx Orin平台JP5.1.4-R35.6.0版本VI recover导致内核崩溃问题(有官方patch)
  • uni-app项目从0-1基础架构搭建全流程
  • Nextcloud与Google就安卓文件访问权限展开博弈
  • 从代码学习深度学习 - 预训练word2vec PyTorch版
  • NebulaGraph学习笔记-SessionPool之Session not existed
  • 五、central cache的设计
  • 多环境回测模拟不同市场条件下的策略表现
  • CSS专题之常见布局
  • 设备全生命周期管理:从采购到报废的数字化闭环方案
  • Varlet UI-Material Design风格Vue 3框架移动端组件库
  • SUI批量转账几种方法介绍
  • 构建AI时代的大数据基础设施-MaxCompute多模态数据处理最佳实践
  • 人工智能+:职业价值的重构与技能升级
  • LSM Tree算法原理
  • [特殊字符]车牌识别相机,到底用在哪?
  • 芯片分享之AD976性能介绍
  • NVM 安装与配置指南
  • Python中使用CUDA/GPU的方式比较
  • GMSL:汽车里的音视频传输
  • Python 包管理工具uv依赖分组概念解析
  • 瑞莎星睿 O6 (Radxa Orion O6)-ubuntu24.04-ROS2 运行深度估计模型
  • 数据分析_主播考核指标体系搭建
  • C++学习:六个月从基础到就业——多线程编程:互斥量与锁
  • Git 删除大文件教程
  • 如果用户点击微博的关注图标,但是app上面没有反应,应该怎么排查这个问题?
  • 集成飞书多维表格
  • 详解MySQL 的 binlog,redo log,undo log
  • 【razor】pacing平滑发送及调度机制分析