LVGL8学习之row and a column layout with flexbox

2023-11-13

这一篇来学习一下基于flexbox(柔性盒子)简单行和列布局,还是通过codeblock来模拟代码的运行,可设置layout对象内部的水平和竖直填充,以及布局内各item之间的间隔填充

代码如下:

void lv_flex_layout_test()
{
    lv_obj_t * container_row1 = lv_obj_create(lv_scr_act()); // 创建一个对象container_row1
    if (container_row1 == NULL)
    {
        return;
    }

    lv_obj_set_size(container_row1, 500, 75); // 设置对象大小
    lv_obj_align(container_row1, LV_ALIGN_TOP_MID, 0, 5); // 设置对象基于屏幕中间对齐
    lv_obj_set_flex_flow(container_row1, LV_FLEX_FLOW_ROW); // 设置对象使用基于行的流失弹性布局flex

    lv_obj_t * container_row2 = lv_obj_create(lv_scr_act()); // 创建一个对象container_row2
    if (container_row2 == NULL)
    {
        return;
    }

    lv_obj_set_size(container_row2, 500, 75); // 设置对象大小
    // 设置对象container_row2基于对象container_row1外部下方中间对齐
    lv_obj_align_to(container_row2, container_row1, LV_ALIGN_OUT_BOTTOM_MID, 0, 20);
    lv_obj_set_flex_flow(container_row2, LV_FLEX_FLOW_ROW); // 设置对象使用基于行的流失弹性布局flex
    lv_obj_set_style_pad_ver(container_row2, 0, 0); // 设置对象内部水平方向的填充为0
    lv_obj_set_style_pad_row(container_row2, 0, 0);  // 设置对象container_row2内部item之间的行间距填充为0
    lv_obj_set_style_pad_column(container_row2, 1, 0); // 设置对象container_row2内部item之间的列间距填充为1


    /*Create a container with COLUMN flex direction*/
    lv_obj_t * container_col1 = lv_obj_create(lv_scr_act());
    if (container_col1 == NULL)
    {
        return ;
    }

    lv_obj_set_size(container_col1, 100, 250); // 设置对象大小
      // 设置对象container_col1基于对象container_row2外部下方中间对齐
    lv_obj_align_to(container_col1, container_row2, LV_ALIGN_OUT_BOTTOM_MID, -100, 20);
    lv_obj_set_flex_flow(container_col1, LV_FLEX_FLOW_COLUMN); // 设置对象使用基于列的流失弹性布局flex

    lv_obj_t * container_col2 = lv_obj_create(lv_scr_act());
    if (container_col2 == NULL)
    {
        return ;
    }

    lv_obj_set_size(container_col2, 100, 250); // 设置对象大小
    // 设置对象container_col2基于对象container_row2外部下方中间对齐
    lv_obj_align_to(container_col2, container_row2, LV_ALIGN_OUT_BOTTOM_MID, 100, 20);
    lv_obj_set_flex_flow(container_col2, LV_FLEX_FLOW_COLUMN);  // 设置对象使用基于列的流失弹性布局flex
    lv_obj_set_style_pad_hor(container_col2, 0, 0);  // 设置对象内部垂直方向的填充为0
    lv_obj_set_style_pad_row(container_col2, 1, 0); // 设置对象container_col2内部item之间的行间距填充为1
    lv_obj_set_style_pad_column(container_col2, 0, 0); // 设置对象container_col2内部item之间的列间距填充为0


    int i = 0;
    lv_obj_t * obj = NULL;
    lv_obj_t * label = NULL;

    static lv_style_t btn_style;
    lv_style_init(&btn_style); // 初始化样式
    lv_style_set_radius(&btn_style, 0); // 设置样式圆角为0

    for(i = 0; i < 10; i++)
    {
        obj = lv_btn_create(container_row1); // 基于container_row1对象添加button对象
        if (obj != NULL)
        {
            lv_obj_set_size(obj, 100, LV_PCT(100)); // 设置对象大小

            label = lv_label_create(obj); // 创建按键对象创建label对象
            if (label != NULL)
            {
                lv_label_set_text_fmt(label, "Item: %d", i); // 设置label文本
                lv_obj_center(label); // label对象居中显示
            }
        }
    }

    for(i = 0; i < 4; i++)
    {
        obj= lv_btn_create(container_row2);
        if (obj != NULL)
        {
            lv_obj_set_size(obj, 100, LV_PCT(100));
            lv_obj_add_style(obj, &btn_style, 0);

            label = lv_label_create(obj);
            if (label != NULL)
            {
                lv_label_set_text_fmt(label, "Item: %d", i);
                lv_obj_center(label);
            }
        }
    }

    for(i = 0; i < 10; i++)
    {
        obj = lv_btn_create(container_col1);
        if (obj != NULL)
        {
            lv_obj_set_size(obj, LV_PCT(100), LV_SIZE_CONTENT);

            label = lv_label_create(obj);
            if (label != NULL)
            {
                lv_label_set_text_fmt(label, "Item: %d", i);
                lv_obj_center(label);
            }
        }
    }

    for(i = 0; i < 4; i++)
    {
        obj = lv_btn_create(container_col2);
        if (obj != NULL)
        {
            lv_obj_set_size(obj, LV_PCT(100), LV_SIZE_CONTENT);
            lv_obj_add_style(obj, &btn_style, 0);

            label = lv_label_create(obj);
            if (label != NULL)
            {
                lv_label_set_text_fmt(label, "Item: %d", i);
                lv_obj_center(label);
            }
        }
    }
}

运行效果:

参考文献:CSS flexbox 布局综合指南

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

LVGL8学习之row and a column layout with flexbox 的相关文章

  • Android Studio图形界面中的ViewFlipper切换?

    感谢您抽出时间并在有时间的情况下回答我的问题 我对 Android 编程相当陌生 所以任何帮助都很棒 我正在使用 Android Studio 并且编写了一个包含多个布局的 XML 布局 我可以在使用 ViewFlipper showNex
  • IE10 中的弹性盒

    我试图让弹性框在 IE10 中工作 但它不起作用 Safari Chrome 和 Firefox 工作正常 但 IE10 不工作 有人知道答案吗 代码笔 http codepen io anon pen vcEGH http codepen
  • 使用 flex 将项目与底部对齐

    我正在尝试使用 flex 将父级内部的项目与父级底部对齐 但由于某种原因它不起作用 我究竟做错了什么 login border 1px solid red height 50px display flex login border radi
  • 固定 Div 与静态 div 的滚动条重叠

    我无法按照我想要的方式设计布局 我有一个内容区 content 您可以在示例图像中看到的灰色 里面有一个黄色元素 这个div是position static height 100 现在我有一个 left paneldiv 也 与positi
  • HTML/CSS:页面左侧的导航栏

    我发现创建这样具有良好语义的布局很尴尬 左侧是大约 150 像素宽的列 其中包含导航元素 我想将网站这部分的 HTML 放在 HTML 代码的开头 然后有一个简单的方法来强制页面的其余部分不侵占左侧的区域 150 像素列 我考虑过一些选择
  • 提交Ajax表单后如何用消息更新_Layout.cshtml中的DIV?

    目前我有一把剃须刀View像这样 TotalPaymentsByMonthYear cshtml model MyApp Web ViewModels MyViewModel using Ajax BeginForm TotalPaymen
  • 如何计算一行中Flexbox项目的数量?

    网格是使用 CSS flexbox 实现的 Example http jsbin com jumosicasi edit html css js output 本示例中的行数为 4 因为我出于演示目的固定了容器宽度 但是 实际上 它可以根据
  • 从 pyqt 布局中删除项目的最佳方法是什么

    我在 pyqt 中的布局遇到一些问题 关闭布局中的项目后 如果layout count 仍然返回旧的项目计数 所以我认为 close 并没有真正从布局中删除项目 这是一个完整的工作示例 import sys from PyQt4 impor
  • 强制 Flexbox 在特定项目之后换行(方向:列)

    我有导航 各个条目通过 Flexbox 一层一层地显示 方向 列 如果导航条目获得 分隔符 类 则导航应进入下一行 是否可以强制 Flexbox 执行 换行 nav display flex flex direction column na
  • Safari 6 (iOS 6) 弹性布局不会换行元素

    我需要将两个框放在列中 这在我测试过的其他浏览器中有效 但在 iOS 6 上的 Safari 6 中无效 例子 http jsfiddle net 5FESj 1 http jsfiddle net 5FESj 1 display webk
  • Android 布局仅使一个视图将自己绘制为横向,但其他所有视图都使用纵向

    我的活动布局中的主要视图元素是 VideoView 我的视频被渲染为设备的横向分辨率 但视频中的所有内容都是横向的 因此仍然需要在设备处于纵向位置时观看 即使我必须将活动设置为android screenOrientation landsc
  • 在文本基线上水平对齐块

    我有以下 HTML 代码
  • 如何在 LaTeX 中对浮点数进行一致编号?

    我有一个 LaTeX 文档 其中我希望浮点数 表格和数字 的编号采用从 1 到 x 的一个数字序列 而不是根据其类型采用两个序列 我也不使用图形或表格列表 也不需要这样做 我的文档类是报告 通常我的浮动有这样的标题 caption Brea
  • 嵌套 Flexbox 100% 高度在 Safari 中不起作用 [重复]

    这个问题在这里已经有答案了 我是 Flexbox 的新手 我尝试使用它来创建一个具有固定页眉 固定页脚和填充页眉和页脚之间可用空间的内容区域的布局 内容区域是一个可滚动区域 有 3 个面板 div 每个面板都有 100 的高度 出于演示目的
  • 柔性端和端部的区别? [复制]

    这个问题在这里已经有答案了 当我使用 css 属性时align items 我看不出与值有任何视觉差异flex end或值end 有什么区别align items end and align items flex end 一个值 end 在
  • WPF 中的液体布局?

    Liquid布局在WPF中可行吗 当我们进行 Liquid 布局时 我们需要解决哪些顾虑 问题 Liquid 布局是否会调整文本字体大小 并且在图像变小和变大时也会调整图像宽度 是的 大多数容器 在 WPF 中称为面板 都支持液体布局 但使
  • img设置flex-grow来填充flex容器剩余空间,它会导致flex内部溢出flex容器[重复]

    这个问题在这里已经有答案了 以下是我的代码 text1 溢出 Flex 容器 我期望 Flex 容器中的 img 文本和 img 填充 Flex 容器其余部分
  • SwiftUI 表单中的动态行高

    我正在向 SwiftUI 表单添加控件以帮助用户输入数据 并限制条目 尽管 Forms 有很多值得喜欢的地方 但我发现在该容器之外运行良好的东西在容器内却会发生非常意想不到的事情 并且如何弥补这一点并不总是显而易见的 计划是将数据字段显示为
  • 将按钮固定到容器的底角

    我正在使用 Flexbox 使表单垂直和水平居中 在此表单中 我想将一个按钮固定到 Flexbox 容器的右下角 我不知道如何将按钮固定在右下角 html body height 100 container height 100 displ
  • ror 中的多种布局

    昨天刚开始使用 Ruby on Rails 在我的 layouts application html erb 中 我有 div class conta div

随机推荐

  • 打开新窗口不用window.open的替代方法

    实现脚本如下
  • ubutnu vins_fisheye编译错误 hidden symbol“ “ in“ “ is referenced by DSO

    usr bin ld home mwy vins fisheye devel lib vins vins node hidden symbol ZN5ceres12CostFunctionD2Ev in usr local lib libc
  • docker centos6 ssh 自启动

    docker centos6 自启动ssh服务 前期准备 下载centos6 6版本镜像 启动容器完善容器环境 修改登录密码 更换yum源地址 推荐使用阿里源http mirrors aliyun com repo Centos 6 rep
  • Linux 磁盘管理,分区,文件系统

    目录 磁盘基本概念 磁盘在Linux中的表示 分区的概念 分区是软件概念 MBR GPT 使用fdisk进行磁盘管理 文件系统 mke2fs mkfs mke2fs mkfs dumpe2fs 日志 e2label fsck file sy
  • 开源学习组织:Datawhale

    这篇文章其实最早成立Datawhale的时候写的 那时候我们还是在读的学生 以下文字一直没有更新 一是希望提醒我们不要忘记初心 二是希望让大家知道 当Datawhale陪伴了学习者成长 做成了一些事 它的起源只是因为播下了一颗理想的种子 申
  • Android12 ---- Material You 应用

    背景 Google android S 新特性 当你更换壁纸 整个手机主题的颜色会根据壁纸的配色方案而改变 也就说 每当你更新壁纸 你的手机界面也会焕然一新 当用户在 Android 12 设备上更改壁纸时 系统会分析图像以选择一种颜色 并
  • Xcode 4 常用快捷键(和 Xcode 3 有些不一样了)

    Xcode 4 常用快捷键 和 Xcode 3 有些不一样了 2011 06 16 Unmi 把 Xcode 由 3 2 5 升级到 Xcode 4 0 2 之后 满以为快捷键总该不会变化太大吧 没想又要经历一个快捷键的适应过程 发现有些在
  • 思维能力的学习

    前言 在工作中 随着工作时间的增长 我们与他人的差异不是知识本身的差异 主要是思维方面的差异 所以我们需要培养自己的思维能力 思维能力的学习 思维是一个具备内在框架和逻辑的系统工程 思维覆盖了学习 认知 问题解决和复盘以及知识库多维度的内容
  • 华为出品Python入门教程:从零基础入门到精通,这一篇就够了

    前言 本文罗列了了python零基础入门到精通的详细教程 内容均以知识目录的形式展开 01 python由来与发展介绍 02 项目开发流程 第一章 markdown编辑器 01 markdown基本语法 02 Typora简介与安装 03
  • 在QT中使用日志系统

    当写好的软件发布出去后 用户遇到死机或一些其他的bug 我们该怎么追踪这些问题呢 这时候日志系统很好的帮助了我们 最近也是参照网络大牛的博客代码实现了log 下面看看代码吧 void outputMessage QtMsgType type
  • 爬虫篇(2.2)使用scrapy-jsonrpc简单教程

    首先安装scrapy jsonrpc pip install scrapy jsonrpc 打开你的爬虫项目中setting py文件 加入如下代码进行配置 EXTENSIONS scrapy jsonrpc webservice WebS
  • 网络编程5之poll、epoll、超时检测

    1 poll机制 poll的实现和select非常相似 只是文件描述符fd集合的方式不同 poll使用struct pollfd结构而不是select的fd set结构 其他的都差不多 include
  • R手册(Common)--data.table

    R语言data table包是自带包data frame的升级版 用于数据框格式数据的处理 最大的特点快 包括两个方面 一方面是写的快 代码简洁 只要一行命令就可以完成诸多任务 另一方面是处理快 内部处理的步骤进行了程序上的优化 使用多线程
  • wireshark只保存显示过滤器筛选的部分报文的方法

    有几种方法 1 先用filter进行过滤 然后File Save As Packet Range里面选择Displayed 然后保存 2 如果想保存从第2001个到第3000个这1000个包 可以在2001个包上点右键选择Mark Pack
  • 前端架构的艺术:解决问题、优化体验和提升效率

    引言 在当今的互联网时代 前端开发的重要性日益凸显 前端架构 作为前端开发的核心 关乎着产品的用户体验 性能和可维护性 本文将带你探讨前端架构的重要性和应用场景 分析各种前端架构的优缺点 并展示一个实际的前端架构解决方案 通过本文 你将获得
  • 【多模态】9、GLIP

    文章目录 一 背景 二 方法 2 1 将 object detection 和 phrase grounding 进行统一 2 2 Language aware deep fusion 2 3 使用语义丰富的数据来进行预训练 三 效果 3
  • (附源码)计算机毕业设计ssm高校网上报销系统

    项目运行 环境配置 Jdk1 8 Tomcat7 0 Mysql HBuilderX Webstorm也行 Eclispe IntelliJ IDEA Eclispe MyEclispe Sts都支持 项目技术 SSM mybatis Ma
  • Spring的几种注入bean的方式

    在Spring容器中为一个bean配置依赖注入有三种方式 使用属性的setter方法注入 这是最常用的方式 使用构造器注入 使用Filed注入 用于注解方式 使用属性的setter方法注入 首先要配置被注入的bean 在该bean对应的类中
  • C++下的protobuf简单使用

    Google Protocol Buffer API简单使用总结 大致步骤如下 1 编写 msg proto 文件 package lm 我理解成命名空间 message helloworld 我理解成类 required int32 id
  • LVGL8学习之row and a column layout with flexbox

    这一篇来学习一下基于flexbox 柔性盒子 简单行和列布局 还是通过codeblock来模拟代码的运行 可设置layout对象内部的水平和竖直填充 以及布局内各item之间的间隔填充 代码如下 void lv flex layout te