LVGL 网格菜单界面开发教程(分步图标绘制+自定义菜单适配)
一、开发概述
本文基于 LVGL 框架实现一套自定义网格布局菜单屏幕,支持批量绘制菜单图标、区分背景图标/普通图标、自适应行列布局、焦点选中功能。整体开发流程分为5大核心逻辑步骤,封装独立创建函数,适配嵌入式设备UI菜单场景,代码解耦性高、可直接移植。
核心实现函数:lv_obj_t *menu_create_screen(Icon_Mode *icon_mode)
二、整体核心开发流程(5大核心步骤)
-
创建菜单项容器:基于当前屏幕初始化菜单根容器,配置基础尺寸、样式、布局属性
-
创建菜单项分组:基于网格布局完成行列规则、边距、对齐方式的全局配置
-
遍历绘制菜单项:根据索引遍历所有菜单,智能区分绘制背景图标与普通图标,并设置焦点选中状态
以下对 menu_create_screen 函数进行完整逻辑拆解,覆盖从屏幕初始化到菜单渲染的所有细节,适配 LVGL 最新布局规则。
lv_obj_t *menu_create_screen(Icon_Mode *icon_mode)
{
1.获取当前活跃屏幕
2.在当前屏幕创建一个菜单容器
3.设置菜单容器大小
4.设置菜单项容器的用户数据为图标数据指针
5.设置菜单项容器的滚动条模式为关闭,避免滚动条对菜单的影响
6.设置菜单项容器的布局为网格布局
7.设置菜单项容器的网格列描述
8.设置菜单项容器的网格行描述
9.设置菜单项容器的网格列描述和网格行描述
10.设置菜单项容器的网格对齐方式为居中对齐
11.设置菜单项容器的左内边距为20
12.设置菜单项容器的右内边距为20
13.设置菜单项容器的上内边距为5
14.设置菜单项容器的下内边距为5
15.设置菜单项容器的列内边距为10
16.设置菜单项容器的行内边距为10
17.把当前菜单页的链表,转换为数组,方便随机遍历
18.统计出所有菜单按键数量
19.根据按键数量和行列坐标绘制图标
20.标记当前菜单
21.设置选中菜单,为当前焦点
}
总结:这些只是LVGL一个简单菜单页面的开发,采用网格布局,后续还有触摸回调,界面跳转,三级界面的设置等
浙公网安备 33010602011771号