LVGL笔记10–lv_cont容器

​简介:所谓的容器就是一个载体,用来装东西的,在 littleVGL 中,可以用来存放各种各样的子对象,当子对象的数量越来越多时,子对象们在父容器中的排列方式就显得尤为重要,因此lv_cont 容器就有一个专门的 Layout 布局属性来约束子对象们的摆放,layout 布局间隙是由样式来控制的,具体表现style.body.padding 样式属性上,lv_cont 容器除了 layout 这个重要特性外,还有一个 Auto fit 大小自动适应的特性.只要弄懂了 Layout 和 Auto fit 这俩个概念,lv_cont容器的使用就特别简单了,所以请务必搞懂,因为后面还有许多复杂一点的控件是由 lv_cont容器构成的.


主要数据类型

  1. 布局数据类型

    enum {LV_LAYOUT_OFF = 0, LV_LAYOUT_CENTER, LV_LAYOUT_COL_L,LV_LAYOUT_COL_M,LV_LAYOUT_COL_R,LV_LAYOUT_ROW_T,LV_LAYOUT_ROW_M,LV_LAYOUT_ROW_B, LV_LAYOUT_PRETTY, LV_LAYOUT_GRID,_LV_LAYOUT_NUM //这个值是无意义的,只是用来记录一下有多少种布局方式
    };
    typedef uint8_t lv_layout_t;
    
    • LV_LAYOUT_OFF:这个值是用来禁止布局功能的。当禁止后,对于子对象在容器中的摆放位置,子对象必须通过手动_lv_obj_set_pos(child,x,y);_这样的接口来设置其具体位置,如果没有禁止布局功能,就算子对象调用lv_obj_set_pos(child,x,y);函数也无效。

    • LV_LAYOUT_CENTER:把所有的子对象以从上到下的方式摆放在父容器的正中心,其中A,B,C子对象之间的垂直间距可以通过lv_cont_style.body.padding.inner样式值来修改。

    • LV_LAYOUT_COL_L:从父容器的左上角开始,把所有的子对象以从上到下的方式进行摆放,其中A,B,C子对象之间的垂直间距可以通过 lv_cont_style.body.padding.inner样式值来修改,与父容器左边的距离可以通过 lv_cont_style.body.padding.left 样式值来修改,与父容器上边的距离可以通过lv_cont_style.body.padding.top 样式值来修改

    • LV_LAYOUT_COL_M:从父容器的顶部中心点开始,把所有的子对象以从上到下的方式进行摆放,其中A,B,C 子对象之间的垂直间距可以通过 lv_cont_style.body.padding.inner样式值来修改,与父容器上边的距离可以通过 lv_cont_style.body.padding.top 样式值来修改。

    • LV_LAYOUT_COL_R:从父容器的右上角开始,把所有的子对象以从上到下的方式进行摆放,其中A,B,C 子对象之间的垂直间距可以通过 lv_cont_style.body.padding.inner样式值来修改,与父容器上边的距离可以通过 lv_cont_style.body.padding.top 样式值来修改。

    • LV_LAYOUT_ROW_T:从父容器的左上角开始,把所有的子对象以从左到右的方式进行摆放,其中A,B,C 子对象之间的水平间距可以通过 lv_cont_style.body.padding.inner样式值来修改,与父容器左边的距离可以通过 lv_cont_style.body.padding.left 样式值来修改,与父容器上边的距离可以通过 lv_cont_style.body.padding.top 样式值来修改

    • LV_LAYOUT_ROW_M:从父容器的左边中心点开始,把所有的子对象以从左到右的方式进行摆放,从父容器的左边中心点开始,把所有的子对象以从左到右的方式进行摆放。其中A,B,C 子对象之间的水平间距可以通过 lv_cont_style.body.padding.inner样式值来修改,与父容器左边的距离可以通过 lv_cont_style.body.padding.left 样式值来修改

    • LV_LAYOUT_ROW_B:从父容器的左下角开始,把所有的子对象以从左到右的方式进行摆放,其中A,B,C 子对象之间的水平间距可以通过 lv_cont_style.body.padding.inner样式值来修改,与父容器下边的距离可以通过 lv_cont_style.body.padding.bottom 样式值来修改。

    • LV_LAYOUT_PRETTY:从父容器的左上角开始,把所有的子对象以从左到右,从上到下的方式进行摆放,并且保证每一行都均匀分布,其中子对象之间的水平和垂直距离都是通过 lv_cont_style.body.padding.inner 样式值来修改的,另外通过 lv_cont_style.body.padding.left/top/right/bottom 等样式值来修改其与父容器相应边的距离

    • LV_LAYOUT_GRID:LV_LAYOUT_GRID 和 LV_LAYOUT_PRETTY 是很相似的,但是LV_LAYOUT_GRID 不

      要求在每一行均匀分布,而是按照 lv_cont_style.body.padding.inner 指定的间隙依次摆放

  2. 大小自适应数据类型

    enum {LV_FIT_NONE, LV_FIT_TIGHT, LV_FIT_FLOOD, LV_FIT_FILL, _LV_FIT_NUM //这个值是无意义的,只是用来记录一下有多少种自适应方式
    };
    typedef uint8_t lv_fit_t;
    

    这个数据类型就是lv_cont容器的大小自适应特性,所谓的自适应就是指lv_cont容器的大小可以根据它的子对象或父对象的大小来调整。

    • LV_FIT_NONE:禁止 lv_cont 容器使用自适应功能,当禁止之后,那么 lv_cont 容器只能通过手动调用lv_obj_set_size 接口来设置容器的高和宽了,如果没有禁止的话,调用 lv_obj_set_size 接口是无效的

    • LV_FIT_TIGHT:包裹住所有的子对象,也就是说 lv_cont容器的大小是随着子对象们的总大小变化而变化的,子对象与父容器四边的距离可以通过 lv_cont_style.body.padding.left/top/right/bottom 样式值来相应的设置

    • LV_FIT_FLOOD:lv_cont容器平铺它父对象的整个空间,lv_cont容器与其父对象四边的距离可以通过其父对象样式中的 body.padding.left/top/right/bottom 值来相应的修改

    • LV_FIT_FILL:当 lv_cont 容器比其父对象小时,采用 LV_FIT_FLOOD 方式,当比其父对象大时,采用

      LV_FIT_TIGHT 方式

  3. API接口函数

    1. 创建容器

      /*--------------------------------------------------------------------------------par: 指向父对象copy: 此参数可选,表示创建新对象时,把 copy 对象上的属性值复制过来返回值: 返回新创建出来的容器对象,如果为 NULL 的话,说明堆空间不足了
      ---------------------------------------------------------------------------------*/
      lv_obj_t * lv_cont_create(lv_obj_t * par, const lv_obj_t * copy);
      
    2. 设置容器的布局方式

      /*-------------------------------------------------------------------------------cont: 容器对象layout: 布局方式,请详看 2.1.1 布局数据类型那一小章节
      -------------------------------------------------------------------------------*/
      void lv_cont_set_layout(lv_obj_t * cont, lv_layout_t layout);
      
    3. 设置容器4个方向的自适应方式

      /*-------------------------------------------------------------------------------cont: 容器对象left: 左边的自适应方式,请详看 2.1.2 大小自适应数据类型那一小章节right: 右边的自适应方式top: 上边的自适应方式bottom: 下边的自适应方式
      -------------------------------------------------------------------------------*/
      void lv_cont_set_fit4(lv_obj_t * cont, lv_fit_t left, lv_fit_t right, lv_fit_t top, lv_fit_t bottom);
    4. 设置容器水平垂直向上的自适应方式

      /*-------------------------------------------------------------------------------cont: 容器对象hor: 水平方向上的自适应方式ver: 垂直方向上的自适应方式
      -------------------------------------------------------------------------------*/
      static inline void lv_cont_set_fit2(lv_obj_t * cont, lv_fit_t hor, lv_fit_t ver);
      
    5. 设置容器的自适应方式

      /*-------------------------------------------------------------------------------cont: 容器对象fit: 四个方向上的共同自适应方式
      -------------------------------------------------------------------------------*/
      static inline void lv_cont_set_fit(lv_obj_t * cont, lv_fit_t fit);
      
    6. 设置容易的样式

      /*-------------------------------------------------------------------------------cont: 容器对象type: 设置容器上的哪部分样式,目前只有 LV_CONT_STYLE_MAIN 一个可选值style: 样式
      -------------------------------------------------------------------------------*/
      static inline void lv_cont_set_style(lv_obj_t * cont, lv_cont_style_t type, const lv_style_t * style);
      

LVGL笔记10--lv_cont容器相关推荐

  1. littleVGL学习笔记8——lv_cont 容器

    1. 介绍   所谓的容器就是一个载体,用来装东西的,在 littleVGL 中,可以用来存放各种各样的子对象,当子对象的数量越来越多时,子对象们在父容器中的排列方式就显得尤为重要,因此lv_cont ...

  2. Flutter学习笔记(10)--容器组件、图片组件

    如需转载,请注明出处:Flutter学习笔记(10)--容器组件.图片组件 上一篇Flutter学习笔记(9)--组件Widget我们说到了在Flutter中一个非常重要的理念"一切皆为组件 ...

  3. python慕课笔记_MOOC python笔记(三) 序列容器:字符串、列表、元组

    Python Python开发 Python语言 MOOC python笔记(三) 序列容器:字符串.列表.元组 容器概念 容器是Python中的重要概念,分为有序与无序. 有序容器也称为序列类型容器 ...

  4. Think in Java第四版 读书笔记10 第16章 数组

    Think in Java第四版 读书笔记10 第16章 数组 数组和容器很像 但他们有一些差别 16.1 数组为什么特殊 数组与容器的区别主要在效率和存储类型 效率:数组是简单的线性序列 使得数组的 ...

  5. Java编程笔记9:容器(下)

    Java编程笔记9:容器(下) 图源:PHP中文网 本篇文章是Java编程笔记8:容器(上) - 魔芋红茶's blog (icexmoon.xyz)的下篇. Set Set也是一种常见的数据类型,很 ...

  6. 【C++ Primer 学习笔记】: 容器和算法之【泛型算法】

    本系列博客主要是在学习 C++ Primer 时的一些总结和笔记. [C++ Primer 学习笔记]: 容器和算法之[泛型算法] 本文地址:http://blog.csdn.net/shanglia ...

  7. Go学习笔记06-内建容器

    Go学习笔记06-内建容器 Go语言 数组 *切片(Slice) #F44336 Slice的操作 Map map示例 字符处理 数组 定义数组: //这样定义数组编译器自动初始化每个元素为0 var ...

  8. thinkphp学习笔记10—看不懂的路由规则

    原文:thinkphp学习笔记10-看不懂的路由规则 路由这部分貌似在实际工作中没有怎么设计过,只是在用默认的设置,在手册里面看到部分,艰涩难懂. 1.路由定义 要使用路由功能需要支持PATH_INF ...

  9. SpringMVC:学习笔记(10)——整合Ckeditor且实现图片上传

    SpringMVC:学习笔记(10)--整合Ckeditor且实现图片上传 配置CKEDITOR 精简文件 解压之后可以看到ckeditor/lang下面有很多语言的js,如果不需要那么多种语言的,可 ...

最新文章

  1. [转]Mysql中的SQL优化与执行计划
  2. gcc创建静态库和共享库
  3. MacOS sublime-text-removal
  4. 作者:赵晨(1980-),男,深圳般若计算机系统股份有限公司气象大数据应用负责人...
  5. 大智慧c语言dll,dzh2 大智慧dll 插件 - 下载 - 搜珍网
  6. 公司周刊-非常6+1—营销平台小组
  7. [心情]一落千丈的反差
  8. Unity Translate方法使用指南
  9. 农村市场谋定中国农民丰收节交易会 消费潜力持续正释放
  10. PHP验证码类庫,php验证码类
  11. 图像视频伪造检测,针对DeepFake技术检测效果不佳
  12. 【Linux学习笔记】27:环境变量中的语系变量
  13. 测量一款高频频率计:FA-2
  14. 阿龙的学习笔记---Linux GDB 调试工具(博客转载总结)
  15. Linux——使用for循环语句
  16. matlab示波器图形保存,MATLAB中示波器数据的绘图与保存
  17. OS属不属于计算机硬件系统,os系统是什么意思 os系统是属于哪个系统
  18. Cryptozoic隐生宙使用指南
  19. Delphi 10 Seattle小票打印控件TQ_Printer
  20. android卸载应用权限管理,使用系统权限静默卸载应用程序

热门文章

  1. python可视化---阶梯图step()
  2. WGS84(GPS坐标) BD09坐标(百度坐标)GCJ02(国测局坐标) 的相互转换
  3. Android应用主界面底部菜单实现
  4. SpringCloud Stream+RabbitMQ自定义通道
  5. 关于友盟9.3.8版本集成QQ无效问题
  6. hutool工具类生成二维码案例
  7. OpenStack 归档 - 虚拟机临时存储与块存储
  8. 嵌入式应用层开发要学习什么
  9. “景驰科技杯”2018年华南理工大学程序设计竞赛 C Youhane's Undergraduate Thesis (大模拟)
  10. (翻译)用户难以阅读全大写文本的原因