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 的相关文章

  • 轻量级、基于 PHP 的布局框架...知道吗? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找一个轻量级的 基于 PHP 的布局框架 就像 Zend Framework 如何使用布局一样 我想创建一个布局模板并仅包含必要页
  • Android Material Design 中的“触摸目标尺寸”到底是什么

    参考有关 Material Design 的 Android 文档 我经常发现我们被引导将按钮的 触摸目标 设置为高度 例如 48dp https www google com design spec components buttons
  • 如何在android xml布局中将9个按钮放在3行中?

    我正在尝试制作一个井字游戏 android 版本 我想让所有 9 个按钮根据设备的宽度和高度自动调整大小 并将它们均匀地放在 3 3 网格中 但我现在只能设置它们的尺寸的数字 谁能告诉我如何让他们使用父母的高度和宽度并计算他们的尺寸 另外
  • 在 Android 中向 TabActivity 添加意图

    我查了一些关于如何在android中构建TAB的在线教程 并看到了符合我要求的教程 我很高兴实施它并且效果很好 当我希望每个单独的选项卡推送到一个单独的活动时 问题就出现了 我无法开始并打算传递控制权 我只给出了关于如何制作选项卡的主要代码
  • Android 自定义通知布局与 RemoteViews

    我正在尝试使用此为我的 Android 应用程序创建自定义通知post https stackoverflow com questions 18367631 change notification layout 我偶然发现了一个我在过去 2
  • 如何在 IE7 中将绝对定位的 div 居中?

    更新了布局的提供上下文 I have a relatively simple structure for my page The page is composed of two div s both absolutely positione
  • Android在布局中绘制分隔线/分隔线?

    这个问题的答案是社区努力 help privileges edit community wiki 编辑现有答案以改进这篇文章 目前不接受新的答案或互动 我想在布局的中间画一条线 并将其用作其他项目 如 TextView 的分隔符 有没有一个
  • 如何使用 Qt 使用鼠标更改网格布局单元格的大小?

    我使用网格布局 水平和垂直 我喜欢这样一个事实 调整窗口大小时会填充整个窗口内容 但这个扩展管理不善 我经常想只改变网格布局中一列的大小而不改变窗口的大小 例如在 Windows 资源管理器中 有两列 左侧的目录列表及其从左侧到右侧的内容
  • Java - 如何使组件的垂直列居中?

    很简单 我想做的事 但我想不出办法 在 JFrame 或 JPanel 中 如何垂直居中组件 也就是说 类似于在 HTML 中使用 center 标签 组件位于一列中 并且全部居中 我尝试过使用 Y AXIS 和 PAGE AXIS 的 B
  • 在 R 中撤消布局

    我最初创建了一个箱线图和直方图组合的图 为此我设置了 nf lt layout mat matrix c 1 2 2 1 byrow TRUE height c 1 3 par mar c 2 2 1 1 Draw box plot Dra
  • 我可以转换 Flex 框的 Flex-Grow 来生成动画吗?

    是否可以转换弹性盒中的项目 当您单击时 我希望除单击的项目之外的所有项目都折叠起来 单击的空间应使用容器中的所有可用空间 only works once item click function item not this each func
  • 将边权重传递给networkx中的graphviz_layout

    每个人都找不到如何将权重列表的属性名称传递给networkx中的graphviz layout 像这样的事情 nx spring layout G weight weight sum 但与nx graphviz layout G 也许有人会
  • 为什么我的 justify-content 属性不起作用?

    我试图通过将 justify content 属性应用到父 div 来在模板的侧边栏和内容区域之间添加一些空间 但它并没有在侧边栏和内容区域之间添加该空间 我不确定我做错了什么 wrapper display flex flex direc
  • 每行 5 个项目,自动调整 Flexbox 中项目的大小

    我现在有这个 container background gray width 600px display flex flex flow row wrap position relative item background blue widt
  • CSS 列,从上到下然后从左到右

    我正在为应用程序构建报纸风格的布局 我的页面分为 8 列 各列应先垂直填充 然后水平填充 如果没有足够的内容来填充页面 则列仍应首先垂直填充 在页面右侧留下空白 目前 它们首先水平填充 在内容下方留下空白 我已经尝试过使用 CSS 列 但它
  • 如果子级包含很长的单词,Flexbox 父级将扩展宽度

    我想知道是否有人可以帮助我解决这个问题 我似乎找不到其他人想要用 Flexbox 来做到这一点 我已经设置了一个基本的 Flexbox 场景 其中多个元素 li 出现在 Flexbox 容器 ul 中 我还对其进行了设置 以便在换行之前可容
  • Android - 同一行中的两个按钮填充整个宽度

    我在定义相对布局时遇到了一些问题 我有一个带有滚动的列表视图 并且两个按钮始终在列表视图的底部可见 我只是希望我的两个按钮有 50 的宽度 填充该线 这是我的代码
  • Swing 组件 - 禁用布局中的调整大小

    我有一个自定义 GUI 组件 它基于 Swing 的 JPanel 该组件放置在使用 BorderLayout 的 JFrame 中 当我调整框架大小时 该组件会不断调整大小 我怎样才能避免这种情况 我希望组件无论发生什么情况都保持相同的大
  • Android:焦点时改变样式

    我有这个自定义布局 LinearLayout FrameLayout ImageView TextView 此布局对点击事件做出反应 使用LinearLayout setOnClickListener 并使用可聚焦android focus
  • 我可以在 Android 上使用带有文本视图的列表视图和图像图标吗

    我需要一个像下面的 Android 应用程序那样的列表视图 由于我无法发布图片 所以应该是这样的 图片在这里 一些自由文本 用户名等 这是你的任务 任务1 gt 任务2 gt 任务 1 和任务 2 是将从数据库动态获取的列表 我试图拥有一个

随机推荐

  • 打开新窗口不用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