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

LVGL(Grid)

文章目录

    • 一、什么是 LVGL 的网格布局(Grid)?
    • 二、使用 Grid 布局的步骤
      • ✅ 1. 设置容器为 Grid 布局
      • ✅ 2. 定义网格行列模板
        • 常用单位:
        • 示例:
      • ✅ 3. 应用模板到容器
      • ✅ 4. 设置子控件在网格中的位置和跨度
    • 三、完整示例:2×2 网格
    • 四、Grid 与 Flex 的对比
    • 五、如何选择?
    • 六、可视化对比图示意(示意)🔍



一、什么是 LVGL 的网格布局(Grid)?

网格布局是一种类似 HTML 中 CSS Grid 的布局方式,它允许你将容器划分为“行 × 列”的结构,然后把子控件放到网格的具体格子中。它更适用于复杂、规则、静态的控件排布,比如表格、键盘、计算器等。


二、使用 Grid 布局的步骤

✅ 1. 设置容器为 Grid 布局

lv_obj_set_layout(cont, LV_LAYOUT_GRID);

或者你可以直接使用 lv_obj_set_grid_dsc_array() 来初始化布局(推荐使用)


✅ 2. 定义网格行列模板

你需要提前定义一个“模板”,告诉 LVGL 每行/每列多宽、是否可伸缩。

常用单位:
  • LV_GRID_FR(n):比例单位(像 CSS 的 fr
  • LV_GRID_CONTENT:自动匹配内容大小
  • LV_GRID_TEMPLATE_LAST:标记模板结束
示例:
static lv_coord_t col_dsc[] = {LV_GRID_FR(1), LV_GRID_FR(2), LV_GRID_TEMPLATE_LAST};
static lv_coord_t row_dsc[] = {LV_GRID_CONTENT, LV_GRID_FR(1), LV_GRID_TEMPLATE_LAST};

这表示:

  • 有两列,第一列宽度是 1 比例单位,第二列宽度是 2;
  • 有两行,第一行为内容大小,第二行为 1 比例单位。

✅ 3. 应用模板到容器

lv_obj_set_grid_dsc_array(cont, col_dsc, row_dsc);

✅ 4. 设置子控件在网格中的位置和跨度

lv_obj_set_grid_cell(child, LV_GRID_ALIGN_STRETCH, 0, 2,LV_GRID_ALIGN_CENTER, 1, 1);

参数解释如下:

lv_obj_set_grid_cell(obj, col_align, col_pos, col_span,row_align, row_pos, row_span);
参数说明
col_align水平方向对齐(如:LV_GRID_ALIGN_CENTER
col_pos起始列编号(从 0 开始)
col_span横向跨几列
row_align垂直方向对齐
row_pos起始行编号
row_span纵向跨几行

三、完整示例:2×2 网格

lv_obj_t * cont = lv_obj_create(lv_scr_act());
lv_obj_set_size(cont, 300, 200);
lv_obj_center(cont);static lv_coord_t col_dsc[] = {LV_GRID_FR(1), LV_GRID_FR(1), LV_GRID_TEMPLATE_LAST};
static lv_coord_t row_dsc[] = {LV_GRID_FR(1), LV_GRID_FR(1), LV_GRID_TEMPLATE_LAST};lv_obj_set_grid_dsc_array(cont, col_dsc, row_dsc);// 创建 4 个按钮,放入网格
for (int i = 0; i < 4; i++) {lv_obj_t * btn = lv_btn_create(cont);lv_obj_set_grid_cell(btn, LV_GRID_ALIGN_CENTER, i % 2, 1,LV_GRID_ALIGN_CENTER, i / 2, 1);lv_obj_t * label = lv_label_create(btn);lv_label_set_text_fmt(label, "Btn %d", i + 1);lv_obj_center(label);
}

四、Grid 与 Flex 的对比

特性Grid 网格布局Flex 弹性布局
布局结构明确的行列划分,固定网格格子主轴 + 子控件自动流式排列
控件定位子控件放入指定行列、支持跨行跨列子控件根据顺序自动排列
控件大小可通过比例、内容、固定值精确控制通常由控件自身宽高 + grow 决定
对齐控制每个子控件可以独立设置对齐整体主轴和交叉轴对齐控制为主
响应式程度更适合静态、规则布局(如键盘)更适合动态内容排列、流式排版(如卡片墙)
学习曲线略高,需要理解网格结构和定位较低,上手快

五、如何选择?

需求类型建议使用
表格、键盘、计算器、九宫格类布局✅ Grid
聊天记录、图片流、按钮组✅ Flex
可预知的行列内容✅ Grid
不确定控件数量或大小✅ Flex

六、可视化对比图示意(示意)🔍

Grid 布局                    Flex 布局
┌────┬────┐                ┌────┬────┬────┐
│ A1 │ A2 │                │ A  │ B  │ C  │
├────┼────┤                └────┴────┴────┘
│ B1 │ B2 │                主轴流动排列
└────┴────┘
规则行列结构                控件顺序排列

相关文章:

  • 用Qt/C++玩转观察者模式:一个会聊天的设计模式
  • Baklib企业CMS实现内容智能归档与精准检索
  • 红黑树,B树,二叉树之间的不同
  • C++类继承详解:权限控制与继承方式解析
  • Gemini Pro 2.5 输出
  • AI 编程如何让你轻松采集网站数据?
  • 第二十一章:数据治理之数据安全:数据安全的驱动因素以及常见的数据安全举措
  • 阿姆斯特朗数
  • 五大要素协同效益的量化模型与实战策略
  • 【Qt开发】容器类控件
  • 真话与假话
  • Java集合框架详解:List、Set、Map及其实现类
  • C-内存函数,动态内存
  • 人工智能概念股:最新投资机会深度解析
  • 数字人教师:开启教育智慧革新之旅
  • 02_MQ常见问题
  • 网络编程--上篇
  • Minktec 柔性弯曲传感器,灵敏捕捉坐姿弓背、精准监测行走姿态,守护儿童背部健康,为科学健身提供数据支撑,开启职业健康与背痛 AI 干预新方向。
  • 将图层为shapefile类型的文件转成PostGis类型的详细实现步骤
  • java每日精进 5.27【异步实现】
  • 网站 建设 流行 数据库/seo诊断工具网站
  • kesioncms企业网站蓝色模板/宁波网站制作与推广价格
  • 利用excel做填报网站/谷歌关键词热度查询
  • wap网站制作需要多少钱/企业如何开展网络营销
  • 慈利网站建设/网站建设制作公司
  • 昆明品牌网站建设/厦门seo关键词优化培训