自适应流式布局
width="100%"
top left right
horizontalCenter=0
失效验证机制
这些异步过程都封装好了,我们只需要关注那一对方法: invalidateProperties() 和 commitProperties() ,前者标记属性失效,后者应用失效的属性
 
一个是测量验证   invalidateSize() 和 measure()
一个是布局验证。 invalidateDisplayList() 和 updateDisplayList()
这两组什么时候用呢
 
  如果你希望你自定义的组件像框架里的标准组件一样,能加入自动布局体系,就必须要同时复写measure()和updateDisplayList()这两个方法
  Group把自己的measure()方法交给了layout.measure()去实现,updateDisplayList()交给了layout.updateDisplayList()去实现。也就是把具体的布局方式解耦了出来,成了独立的一个LayoutBase类。这样所有的容器都可以采用Group+LayoutBase的组合的方式,为自己设置任意的布局。
解决异步问题

失效验证机制能够很好的确保自动布局的性能,但是却会带来新的异步问题,大部分情况下我们并不会感受到失效验证的异步存在,因为它总是在本帧屏幕刷新前验证失效列表的,只有小部分在验证失效过程中又产生了新失效的情况,才会延迟到下一帧去处理。这种情况会导致的结果通常就是在初始化面板时会闪一下。解决这个问题有好几种方案,可以一开始将面板添加到显示列表时设置visible为false,延迟一段时间后再显示它。我们这里再讨论另一种方案,提前处理失效验证:

  • 1.首先你要确定闪一下的异步问题是否是自动布局的失效验证引起的。如果是由于异步加载图片引起的,这种情况属于IO异步,必须先预加载图片资源。

  • 2.将面板添加到显示列表后,调用面板组件上的 validateNow() 方法即可。注意一定要先将面板添加到显示列表在调用立即验证的方法。

还有一种使用情景,不过很少会遇到,就是我们给一个组件设置了自动布局属性,比如 left 和 right,想要获得它布局后的准确宽度。这种情况也同样有两种思路:

  • 1.延迟到帧末失效验证结束时访问宽度。可以使用eui.callLater()方法来实现延迟回调,具体用法请参考API文档。
2.调用组件父级容器的 validateNow() 方法,这里请务必注意是"父级容器"的validateNow()方法,不是自身的,因为组件的布局是由父级容器决定的。
自动布局调试 includeInLayout  指定此组件是否包含在父容器的布局中
explicitWidth,explicitHeight 所以这两个属性的作用就是保存你显式设置的值
)maxWidth,minWidth,maxHeight,minHeight )maxWidth,minWidth,maxHeight,minHeight:最大和最小尺寸。这里要注意:它们同时影响测量和布局的结果。measure()方法执行完会对measuredWidth,measuredHeight赋值一次。然后交给UIComponent里的validteSize()方法,再次规范测量结果。这时候就根据这四个值来规范的。最终确定measuredWidth,measuredHeight的值。布局时同理。
width height 布局设置的值 > 显式设置的值 > 测量的值
measuredWidth,measuredHeight
每个组件measure()方法执行的最终结果就是对这两个属性赋值
它们只记录测量结果
)preferredWidth,preferredHeight 首选宽高,这两个值通常在measure()方法中被调用。只是个便捷属性,按照explicitWidth,explicitHeight > measuredWidth,measuredHeight的优先级返回值。布局类在measure()方法中,调用子项的这个属性,来获取子项的测量结果。累加到自身的测量结果上。注意这个值已经包含旋转和缩放的值,且返回值永远为正数。
)layoutBoundsWidth,layoutBoundsHeight: 布局宽高,这两个值通常在updateDisplayList()方法中被调用。也是个便捷属性。按照 布局设置的宽高 > explicitWidth,explicitHeight > measuredWidth,measuredHeight的优先级返回值。注意这个值已经包含旋转和缩放的值,且返回值永远为正数
preferredX,preferredY,layoutBoundsX,layoutBoundsY 这四个属性,通常情况下就是xy的值。但是当组件含有旋转缩放时。他们为组件旋转缩放后在父级容器里实际显示的起点。
调试技巧
(1)自身是否被显式设置了尺寸?查看explicitWidth,explicitHeight。如果显式设置了,设置的对吗?不对找到问题。没有显式设置就继续。
(2)测量的尺寸对不对?查看measuredWidth,measuredHeight。不对,继续。对,跳到(5)
(3)查看top,left,right,bottom,horizontalCenter,verticalCenter,percentWidth,percentHeight这些布局属性对不对。注意:只有BasicLayout下这些属性才全部有效。
(4)布局类对吗?查看layout属性。以上都查过了,找不出问题,继续按(5)和(6)在显示列表向上或向下开始找。
(5)向上查看父级以及父级的父级容器的相关属性,是否正确。是否是父级容器强制设置了我们的尺寸。
(6)查看子项以及子项的子项的测量尺寸。找到第一个开始不对的节点

转载于:https://www.cnblogs.com/jason-beijing/p/7296611.html

EUI库 - 自动布局相关推荐

  1. EUI库 - EXML

      EXML是可以运行时加载解析的   <e:Skin class="skins.ButtonSkin" states="up,down,disabled" ...

  2. egert eui库移动元素类

    用到的是白鹭egert eui. 我这里假设的情况是,这个元素是外面还有一个容器包着的,它的parent的parent是宽高是舞台的宽高,如果你的不是,你可以根据实际情况自己改下,代码挺简单的.为了以 ...

  3. egret白鹭 基于eui组件的一些动画类 抽屉效果

    用到了白鹭的eui库,以及缓动库. /** * 个人ui控件的控制动画实现  * 1.抽屉效果    抽屉般收回元素,前提是元素要靠边,就是要靠边   你想收回那边,就要靠近那边  * 收回左边 收回 ...

  4. 白鹭引擎拉伸高度_答疑汇总|白鹭引擎架构师开源中国社区分享微信小游戏开发技巧...

    原标题:答疑汇总|白鹭引擎架构师开源中国社区分享微信小游戏开发技巧 1月31日-2月6日,开源中国社区邀请白鹭引擎首席架构师王泽以"微信小游戏开发技巧分享"为主题,为广大开发者带来 ...

  5. draw.io---一款免费、开源的流程图绘制工具

    draw.io 是一款非常强大实用的免费.开源流程图绘制工具,功能众多,例如通过流程图来可视化您的工作流程.创建组织结构图来来显示人员结构.创建网络图来可视化网络等等,适用于商务.工程.电气.网络设计 ...

  6. Windows API参考大全

    第一章 Win32 API概论 1.1为什么使用 Wu32 API 在Windows程序设计领域处于发展初期时,Windows程序员可使用的编程工具唯有API 函数.这些函数在程序员手中犹如" ...

  7. (42)C#里使用WeifenLuo.WinFormsUI.Docking库为界面自动布局

    C#里使用WeifenLuo.WinFormsUI.Docking库为界面自动布局 在开发软件时,一个软件的界面布局,就像建筑高楼的蓝图,在早期就需要详细地规划和设计,避免后期的修改,因为后面修改,就 ...

  8. 第三方库Masonry自动布局AutoLayout使用

    布局: 1. 放在哪  坐标  CGPoint(x, y)    2. 有多大  尺寸  CGSize(width, height) 布局方式: 1.绝对布局(FrameLayout)也称 坐标布局 ...

  9. Swift - 自动布局库SnapKit的使用详解2(约束的更新、移除、重做)

    在之前的文章中我介绍了如何使用SnapKit的 snp_makeConstraints 方法进行各种约束的设置.但有时我们的页面并不是一直固定不变的,这就需要修改已经存在的约束.本文介绍如何更新.移除 ...

  10. iOS开发中用到的一些第三方库

    下面是我在开发中用到的一些优秀的iOS第三方开源库: 1.AFNetworking(网络请求,类似的还有ASIHTTPRequest)    https://github.com/AFNetworki ...

最新文章

  1. 使用GPG校验sign签名
  2. python练习程序(批量重命名)
  3. puppet系列之nginx+php日志切割与salt结合使用
  4. ubuntu 16.04 python3.4 升级为 python3.6
  5. windows app html5,使用 HTML5 來偵測位置 (HTML)
  6. ZYNQ PS端输出无效时钟供PL使用
  7. 为什么这个SQL Server DBA学习PowerShell--SMO任务及杂项
  8. Struts2学习笔记(十) OGNL
  9. idea 正则表达式替换
  10. H3C数通 H3CNE H3CSE 资料下载 肖哥视频下载
  11. Python身份证号码识别
  12. flowable设计器自定义自己的人员选择器
  13. 最新毕业设计参考文献大全
  14. 使用php的curl爬去青果教务系统 课表(转)
  15. centos7 搭建turn stun 服务器
  16. windows2003 升级sp1,sp2 产品密匙无效
  17. 用C++解决数学类问题的练习
  18. 时间序列分类算法之时间序列森林(TSF)
  19. [SPOJ P104]HIGH - Highways(Matrix-Tree定理)
  20. 2022第七届少儿模特明星盛典 小主持人江姿莹 T台风采展示

热门文章

  1. tar包安装vsftpd
  2. 谷歌浏览器元素定位神器 -- chropath插件
  3. 中国K12在线教育用户消费行为报告
  4. PLUS模型教程2:数据前期准备和土地利用数量预测
  5. php file_get_contents 失效,phpfile_get_contents返回空无效解决办法_PHP教程
  6. 第一集 斗罗世界 第二章
  7. unity初学人物走路卡住的问题
  8. 如何创建维恩图,用这个工具就可以了!
  9. [SSL_CHX][2021-08-19]前缀和
  10. java桌球小游戏使用图片_java桌球小游戏 小球任意角度碰撞