【LVGL-Flex布局和Grid布局】

news2025/1/12 16:18:22

LVGL-Flex布局和Grid布局

  • ■ Flex 布局
    • ■ 主轴 : 是定义对象的放置方向的
      • ■ 演示一:LV_FLEX_FLOW_ROW
      • ■ 演示二:LV_FLEX_FLOW_ROW_WRAP
      • ■ 演示三:LV_FLEX_FLOW_ROW_REVERSE
      • ■ 演示四:LV_FLEX_FLOW_ROW_WRAP_REVERSW
      • ■ 演示五:LV_FLEX_FLOW_COLUMN
      • ■ 演示六:LV_FLEX_FLOW_COLUMN_WRAP
      • ■ 演示七:LV_FLEX_FLOW_COLUMN_REVERSE
      • ■ 演示八:LV_FLEX_FLOW_COLUMN_WRAP_REVERSE
    • ■ 交叉轴 : 交叉轴垂直于主轴
      • ■ 主轴为行,交叉轴就是列
      • ■ 主轴为列,交叉轴就是行
    • ■ Flex 布局使用
    • ■ Flex 对齐
      • ■ main_place 形参
      • ■ track_cross_place 形参
      • ■ cross_place 形参
    • ■ flex-grow 属性
    • ■ Flex 条文的样式函数
    • ■ Flex 间隙
  • ■ Grid布局
    • ■ 添加 Grid
    • ■ Grid 间隙
    • ■ 示例一使用Grid

■ Flex 布局

Flex 布局,是一种可以简便、完整、响应式地实现各种页面布局, 它是 CSS 的一个重点应用。
flexbox 一次只能处理一个维度上的元素布局,一行或者一列,Grid 布局是一种二维布局
在 lv_conf.h 文件中把 LV_USE_FLEX 配置项置 1 即可启用 Flex 布局

■ 主轴 : 是定义对象的放置方向的

主轴的定义描述
LV_FLEX_FLOW_ROW将子类们排成一行并不换行
LV_FLEX_FLOW_ROW_WRAP将子类们排成一行并换行
LV_FLEX_FLOW_ROW_REVERSE将子类们排成一行并不换行且顺序相反
LV_FLEX_FLOW_ROW_WRAP_REVERSE将子类们排成一行并换行且顺序相反
LV_FLEX_FLOW_COLUMN将子类们排成一列并不换行
LV_FLEX_FLOW_COLUMN_WRAP将子类们排成一列并换行
LV_FLEX_FLOW_COLUMN_REVERSE将子类们排成一列并不换行且顺序相反
LV_FLEX_FLOW_COLUMN_WRAP_REVERSE将子类们排成一列并换行顺序相反

■ 演示一:LV_FLEX_FLOW_ROW

在这里插入图片描述

■ 演示二:LV_FLEX_FLOW_ROW_WRAP

在这里插入图片描述

■ 演示三:LV_FLEX_FLOW_ROW_REVERSE

在这里插入图片描述

■ 演示四:LV_FLEX_FLOW_ROW_WRAP_REVERSW

在这里插入图片描述

■ 演示五:LV_FLEX_FLOW_COLUMN

在这里插入图片描述

■ 演示六:LV_FLEX_FLOW_COLUMN_WRAP

在这里插入图片描述

■ 演示七:LV_FLEX_FLOW_COLUMN_REVERSE

在这里插入图片描述

■ 演示八:LV_FLEX_FLOW_COLUMN_WRAP_REVERSE

在这里插入图片描述

■ 交叉轴 : 交叉轴垂直于主轴

■ 主轴为行,交叉轴就是列

在这里插入图片描述

■ 主轴为列,交叉轴就是行

在这里插入图片描述

■ Flex 布局使用

使用 Flex 布局有两种方式,
第一种是使用 lv_obj_set_layout 函数方法设置对象启用 Flex 布局,
第二种是使用 lv_obj_set_flex_flow 函数启用 Flex 布局。

void lv_mainstart(void)
{
	/* 第一种方式 */
	static lv_style_t style;
	lv_style_init(&style);
	lv_style_set_flex_flow(&style, LV_FLEX_FLOW_ROW_WRAP);
	
	/* 设置 Flex 布局 */
	lv_style_set_layout(&style, LV_LAYOUT_FLEX);
	lv_obj_t* cont = lv_obj_create(lv_scr_act());
	lv_obj_set_size(cont, 300, 220);
	lv_obj_add_style(cont, &style, 0);
	
	/* 第二种方式 */
	lv_obj_t* cont_row = lv_obj_create(lv_scr_act());
	lv_obj_set_size(cont_row, 300, 220);
	lv_obj_align(cont_row, LV_FLEX_FLOW_ROW, 0, 5);
	
	/* 设置 Flex 布局 */
	lv_obj_set_flex_flow(cont_row, LV_FLEX_FLOW_ROW_WRAP);
	lv_obj_align_to(cont_row, cont, LV_ALIGN_OUT_RIGHT_TOP, 20, 0);
	uint32_t i;
	
	for (i = 0; i < 10; i++) {
		lv_obj_t* obj;
		lv_obj_t* label;
		
		/* 在 cont 容器中添加 btn 对象 */
		obj = lv_btn_create(cont);
		lv_obj_set_size(obj, 100, LV_PCT(100));
		label = lv_label_create(obj);
		lv_label_set_text_fmt(label, "Item: %u", i);
		lv_obj_center(label);
		
		/* 在 cont_row 容器中添加 btn 对象 */
		obj = lv_btn_create(cont_row);
		lv_obj_set_size(obj, 100, LV_PCT(100));
		label = lv_label_create(obj);
		lv_label_set_text_fmt(label, "Item: %u", i);
		lv_obj_center(label);
	}
}

在这里插入图片描述

■ Flex 对齐

设置 flex 元素沿主轴方向和交叉轴方向的对齐方式以及它们之间的空间分配。

lv_obj_set_flex_align(obj, main_place, cross_place, track_cross_place)
obj 指向设置对齐的对象
main_place 主轴上的对象对齐
cross_place 交叉轴上的对象对齐
track_cross_place 行/列交叉轴上的对象对齐

main_place、 cross_place 和 track_cross_place 形参的转入值如下表所示:

配置项描述
LV_FLEX_ALIGN_START水平方向左上和垂直上方向上(默认)
LV_FLEX_ALIGN_END水平方向右侧和垂直底部
LV_FLEX_ALIGN_CENTER居中
LV_FLEX_ALIGN_SPACE_EVENLY任何两个对象之间的间距( 它们的边缘空间相等) ,但不适用于 track_cross_place 形参
LV_FLEX_ALIGN_SPACE_AROUND对象在轨道上均匀分布,周围空间相等,但不适用于 track_cross_place 形参
LV_FLEX_ALIGN_SPACE_BETWEEN对象在轨道上均匀分布:第一个对象在开始行 , 最后 一个 项目 在结 束 行 , 但不 适用 于track_cross_place 形参

track_cross_place 形参只能传入 LV_FLEX_ALIGN_START、 LV_FLEX_ALIGN_END 和LV_FLEX_ALIGN_CENTER 配置项,

■ main_place 形参

在这里插入图片描述

■ track_cross_place 形参

在这里插入图片描述

■ cross_place 形参

cross_place 形参一般在子类对象具有不同的高度时会起作用。

■ flex-grow 属性

LVGL 提供了 lv_obj_set_flex_grow 函数来设置,
第一个形参指向要增长的对象,
第二个形参表示增长的倍数,

例如 有400 像素剩余空间和 3 个对象增长,它们设置分别为 1、 1 和 2,所以它们的宽度分别为 100,100 和 200 像素,如下图所示
在这里插入图片描述
注意: lv_obj_set_flex_grow 函数的第二个形参为 0 时禁用 grow 属性。

■ Flex 条文的样式函数

函数描述
lv_style_set_flex_flow()设置 Flex 流动布局
lv_style_set_flex_main_place()设置主轴
lv_style_set_flex_cross_place()设置交叉轴
lv_style_set_flex_track_place()设置轨道轴
lv_style_set_flex_grow()设置增长

■ Flex 间隙

Flex-gap属性用来设置元素列之间的间隔(gutter)大小,例如修改对象之间的最小空间,
可以在 flex 容器样式上设置以下属性:
① pad_row: 设置行之间的填充。
② pad_column:设置列之间的填充。
如果读者不希望对象之间有任何填充,可调用 lv_style_set_pad_column(&row_container_sty
le,0)函数设置

■ Grid布局

flexbox 一次只能处理一个维度上的元素布局,一行或者一列,Grid 布局是一种二维布局
在 lv_conf.h 文件中把 LV_USE_GRID 配置项置 1 即可启用 Flex 布局

■ 添加 Grid

lv_obj_set_grid_cell 把子类对象添加到指定网格位置
在这里插入图片描述
① GRID_COLUMN_DSC_ARRAY:设置列的描述符数组。
② GRID_ROW_DSC_ARRAY:设置行的描述符数组。
③ GRID_COLUMN_ALIGN:设置列的对象对齐。
④ GRID_ROW_ALIGN:设置列的对象对齐。
⑤ GRID_CELL_X_ALIGN:设置单元格的 X 轴方向对齐。
⑥ GRID_CELL_COLUMN_POS:设置列的单元格位置。
⑦ GRID_CELL_COLUMN_SPAN:设置列的单元格宽度。
⑧ GRID_CELL_Y_ALIGN:设置单元格的 Y 轴方向对齐。
⑨ GRID_CELL_ROW_POS:设置行的单元格位置。
⑩ GRID_CELL_ROW_SPAN:设置行的单元格宽度。
这些函数是使用本地样式来设置 Grid 布局属性

■ Grid 间隙

Grid-gap 属性用来设置元素列之间的间隔( gutter)大小,例如修改对象之间的最小空间,
可以在 Grid 容器样式上设置以下属性:
① pad_row:设置行之间的填充。
② pad_column:设置列之间的填充。

■ 示例一使用Grid

void lv_mainstart(void){
	static lv_coord_t col_dsc[] = { 70, 70, 70, LV_GRID_TEMPLATE_LAST };
	static lv_coord_t row_dsc[] = { 50, 50, 50, LV_GRID_TEMPLATE_LAST };
	/* 创建一个容器 */
	lv_obj_t* cont = lv_obj_create(lv_scr_act());
	/* 设置网格的列数量 */
	lv_obj_set_style_grid_column_dsc_array(cont, col_dsc, 0);
	/* 设置网格的行数量 */
	lv_obj_set_style_grid_row_dsc_array(cont, row_dsc, 0);
	/* 设置容器大小 */
	lv_obj_set_size(cont, 300, 220);
	lv_obj_center(cont);
	/* 开启 GRID 网格 */
	lv_obj_set_layout(cont, LV_LAYOUT_GRID);
	lv_obj_t* obj;
	/* 创建一个 btn 子类 */
	obj = lv_btn_create(cont);
	/* 把 btn 对象添加到网格(0,0)位置 */
	lv_obj_set_grid_cell(obj, LV_GRID_ALIGN_STRETCH, 0,	1,LV_GRID_ALIGN_STRETCH, 0, 1);
	/* 创建一个 switch 子类 */
	obj = lv_switch_create(cont);
	/* 把 btn 对象添加到网格(0,1)位置 */
	lv_obj_set_grid_cell(obj, LV_GRID_ALIGN_STRETCH, 0, 1,LV_GRID_ALIGN_STRETCH, 1, 1);
}

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1548287.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

RK3568笔记二十一:YOLOv8 实例分割部署

若该文为原创文章&#xff0c;转载请注明原文出处。 参考rknn_model_zoo部署YOLOv8 实例分割. 一、环境 1、测试训练环境&#xff1a;AutoDL. 2、平台&#xff1a;rk3568 3、开发板: ATK-RK3568正点原子板子 4、环境&#xff1a;buildroot 5、虚拟机&#xff1a;正点原子…

如何避免SQL注入攻击?

&#x1f413;序言 当涉及到数据库操作时&#xff0c;防止SQL注入攻击至关重要。SQL注入是一种常见的网络安全威胁&#xff0c;攻击者通过在用户输入中插入恶意的SQL代码&#xff0c;从而可以执行未经授权的数据库操作。 &#x1f413;避免方式 使用参数化查询 使用参数化查询…

PostgreSQL技术大讲堂 - 第48讲:PG高可用实现keepalived

PostgreSQL从小白到专家&#xff0c;是从入门逐渐能力提升的一个系列教程&#xff0c;内容包括对PG基础的认知、包括安装使用、包括角色权限、包括维护管理、、等内容&#xff0c;希望对热爱PG、学习PG的同学们有帮助&#xff0c;欢迎持续关注CUUG PG技术大讲堂。 第48讲&#…

JVM本地方法

本地方法接口 NAtive Method就是一个java调用非java代码的接口 本地方法栈&#xff08;Native Method Statck&#xff09; Java虚拟机栈用于管理Java方法的调用&#xff0c;而本地方法栈用于管理本地方法的调用。 本地方法栈&#xff0c;也是线程私有的。 允许被实现成固定或…

java 面向对象入门

类的创建 右键点击对应的包&#xff0c;点击新建选择java类 填写名称一般是名词&#xff0c;要知道大概是什么的名称&#xff0c;首字母一般大写 下面是创建了一个Goods类&#xff0c;里面的成员变量有&#xff1a;1.编号&#xff08;id&#xff09;&#xff0c;2.名称&#x…

华为汽车图谱

极狐 极狐&#xff08;ARCFOX&#xff09;是由北汽、华为、戴姆勒、麦格纳等联合打造。总部位于北京蓝谷。 问界 华为与赛力斯&#xff08;东风小康&#xff09;合作的成果。 阿维塔 阿维塔&#xff08;AVATR&#xff09;是由长安汽车、华为、宁德时代三方联合打造。公司总部位…

Docker Stack(堆栈) 部署多服务集群,多服务编排

1、Docker Stack简介 Docker Stack(堆栈) 是在 Swarm 上管理服务堆栈的工具。而在以前文章docker swarm集群搭建 介绍的 Docker Swarm 只能实现对单个服务的简单部署&#xff0c;于是就引出了Docker Stack。 上面我们介绍到 docker-compose&#xff1a;可以在一台机器上使用…

操作系统高级议题:并发控制与进程互斥技术

✨✨ 欢迎大家来访Srlua的博文&#xff08;づ&#xffe3;3&#xffe3;&#xff09;づ╭❤&#xff5e;✨✨ &#x1f31f;&#x1f31f; 欢迎各位亲爱的读者&#xff0c;感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢&#xff0c;在这里我会分享我的知识和经验。&am…

【Python】学习率调整策略详解和示例

学习率调整得当将有助于算法快速收敛和获取全局最优&#xff0c;以获得更好的性能。本文对学习率调度器进行示例介绍。 学习率调整的意义基础示例无学习率调整方法学习率调整方法一多因子调度器余弦调度器 结论 学习率调整的意义 首先&#xff0c;学习率的大小很重要。如果它…

软件测试技术之登录页面测试用例的设计方法

相信大家都有过写登录测试用例的经验&#xff0c;相较于开发人员编写代码而言&#xff0c;测试人员编写用例同样重要。本文作者总结了一些关于登录用例的经验。 一、功能测试用例设计&#xff1a; 1、正常登录场景 测试用例1&#xff1a;输入正确的用户名和密码&#xff0c;验证…

对于提高Web安全,WAF能有什么作用

数字化时代&#xff0c;网络安全已经成为了一个不可忽视的重要议题。网络攻击事件频发&#xff0c;各种安全隐患层出不穷&#xff0c;如何有效地保护我们的网络空间&#xff0c;确保信息安全&#xff0c;已成为一项迫切的任务。而Web应用防火墙&#xff0c;正是守护网络安全的一…

GitHub学生认证

文件、证明之类的一定要用英文。 我先是用有道网页翻译把学信网的报告翻译成了英文&#xff0c;然后截图传上去&#xff0c; 给我这个答复 所以要先2FA认证、支付信息填好。 2FA认证&#xff1a;Github开启2FA双重验证 - 知乎 (zhihu.com) 支付信息&#xff1a;点击Setting…

找茬游戏小程序源码系统:封面广告+插屏广告 自带流量主低成本 带完整的安装代码包以及搭建教程

近年来&#xff0c;小程序市场持续火爆&#xff0c;各类小程序层出不穷。找茬游戏小程序作为其中的一种&#xff0c;以其独特的游戏形式和良好的用户体验&#xff0c;吸引了大量用户。然而&#xff0c;对于许多开发者和商家来说&#xff0c;开发一款高质量的找茬游戏小程序并非…

无人车+工厂车间集成无缝,这款网关产品了解一下

​诸位朋友们,大家好!今天给大家介绍一款引领工业无人化发展的黑科技 —— 星创易联科技的SV900-5G车载网关。 相信大家对无人驾驶技术都很感兴趣,它代表着未来出行和生产的全新方式。而要实现真正的"无人化",离不开无人车网关这个智能大脑的作用。SV900就是一款专为…

Openlayers 入门教程(一):应该如何学习 Openlayers

还是大剑师兰特&#xff1a;曾是美国某知名大学计算机专业研究生&#xff0c;现为航空航海领域高级前端工程师&#xff1b;CSDN知名博主&#xff0c;GIS领域优质创作者&#xff0c;深耕openlayers、leaflet、mapbox、cesium&#xff0c;canvas&#xff0c;webgl&#xff0c;ech…

联机分析处理技术

目录 一、OLAP概述&#xff08;一&#xff09;OLAP的定义&#xff08;二&#xff09;OLAP的12条准则&#xff08;三&#xff09;OLAP的简要准则&#xff08;四&#xff09;OLAP系统的基本结构 二、OLAP的多维分析操作&#xff08;一&#xff09;切片&#xff08;二&#xff09;…

电脑访问网页获取路由器WAN口内网IP

因为运维过程中容易出现路由器配置了固定IP但是没人知道后台密码&#xff0c;不确定这个办公室的IP地址&#xff0c;且使用tracert路由追踪也只会出现路由器的LAN口网关并不会出现WAN口IP。 今日正好遇到了个好方法&#xff0c;经过测试可以正常使用。 方法如下&#xff1a; 内…

O2OA(翱途)开发平台-快速入门开发一个门户实例

O2OA(翱途)开发平台[下称O2OA开发平台或者O2OA]拥有门户页面定制与集成的能力&#xff0c;平台通过门户定制&#xff0c;可以根据企业的文化&#xff0c;业务需要设计符合企业需要的统一信息门户&#xff0c;系统首页等UI界面。本篇主要介绍通过门户管理系统如何快速的进行一个…

宝宝洗衣机哪个牌子质量好?四大高热度婴儿洗衣机不容错过

相信大部分的用户家里都会备有一台传统的大型洗衣机&#xff0c;不过&#xff0c;如果家里有了初生的婴儿的话&#xff0c;细心的宝爸宝妈还是会为了宝宝的衣物的卫生&#xff0c;而选择分开单独清洗宝宝的衣物&#xff0c;并且很多宝爸宝妈都会自己手工洗。由于刚出生的宝宝的…

Java 基础学习(二十)Maven、XML与WebServer

1 Maven 1.1 什么是Maven 1.1.1 Maven概述 Maven是一种流行的构建工具&#xff0c;用于管理Java项目的构建&#xff0c;依赖管理和项目信息管理。它使用XML文件来定义项目结构和构建步骤&#xff0c;并使用插件来执行各种构建任务。Maven可以自动下载项目依赖项并管理它们的…