Flex 流式布局 之 滚动条篇

flex 框架支持流式布局,什么是流式布局呢,就是在运行时对象的大小是未知的,它可能需要由他的内容(childs)或由它的容器来决定它的实际大小。flex 中有两种流式一种就是 百分比形式的(percentWidth),还以一种就是默认的 measuredWidth。

那么这个流式布局又和滚动条有什么联系呢?看一下以百分比形式的例子

<?xml version="1.0"?><mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"     width="100%" height="100%" xmlns:local="*">    <mx:Script>        <![CDATA[            import mx.controls.Button;            private function clickHandler():void {                var bt:Button = new Button();                inner.addChild(bt);            }        ]]>    </mx:Script>    <mx:Button label="Button" click="clickHandler()"/>    <mx:HBox width="100%" height="100%" borderStyle="solid" borderThickness="10" paddingBottom="20" paddingLeft="20" paddingRight="20" paddingTop="20">        <mx:HBox width="100%" height="100%" borderStyle="solid" borderThickness="10" paddingBottom="20" paddingLeft="20" paddingRight="20" paddingTop="20">            <mx:HBox id="inner" width="100%" height="100%" borderStyle="solid" borderThickness="10" paddingBottom="20" paddingLeft="20" paddingRight="20" paddingTop="20" borderColor="#43C50A">            </mx:HBox>        </mx:HBox>    </mx:HBox></mx:Application>

3个HBox width height 都是 100%,当点击按钮时,会在最里面的HBox (id=inner ) addChild 一个button,因为是百分比的流式布局那么 最里面的 那个inner在未点击前的大小是由它的parent决定的,这时它实际上是有了已经计算过的measureWidth 和 measureHeight了,但是当有child(这里是button)加入后,它的measure值会变吗?看一下图

直到加了5个之后inner的measure值都没变,但是在加第6个时候inner的measure值变了,因为child的视图范围超出了它原来的大小所以就把inner撑大了,从而有导致inner的parent的视图范围超出了inner的parent原来的大小所以inner的parent也被撑大了,就这样一直传到最外面一层,也就是Application,但是Application是有固定大小的是player给它的。

为什么会这样的呢?为什么,滚动条被加到最外层了,而我想让他出现在最里层怎么办?

首先,来看一下,在第一次inner addchild时发生了写什么。

1.override mx_internal function addingChild(child:DisplayObject):void

inner.invalidateSize();
           inner.invalidateDisplayList();

标记inner下一个更新要重新算次村和布局

2.override mx_internal function childAdded(child:DisplayObject):void

child.initialize();

child.invalidateProperties();
          child.invalidateSize();
          child.invalidateDisplayList();

flex框架级别生命周期开始

3.(这里只看尺寸和布局相关的),受LayoutManger控制,执行顺序是

child.invalidateSize();

inner.invalidateSize();

inner.invalidateDisplayList();

child.invalidateDisplayList();

这个顺序和程序刚开始的顺序是一样的,commit从外到里面,在由measue从里面到外面,在由updatDispalyObject从外到里面。

4.child.invalidateSize();会得到button的尺寸,这里button没有给他具体值,它将采用它的默认值作为它的高宽

然后inner.invalidateSize();在layoutManager的管理下执行inner.validateSize() 做写什么事情呢,先执行 HBox的布局管理对象layoutObject.measure(),做写什么事情呢,计算inner自己的measure,包括刚刚加进来的buttom 和一些gap,然后根据meause出来的值 判断inner的大小有没有变,如果变了还会调用parent.invalidateSize();parent.invalidateDisplayList();  在执行到inner.invalidateDisplayList();这里会设置inner的大小了(是在public function validateDisplayList():void)

好晕哦,问题的关键是什么呢,就在最后一次 addChild 后inner measure出来的值变了,从而导致inner变大了,所以就往外挤,一直把滚动条推到最外面一层。

像这样,

那如果想这样,就是这几个嵌套的HBox已经创建了,往inner里面加button,只在inner原有的基础上加滚动条呢?

很简单,就是在 inner的layoutObject.measure()时候对于百分比的情况的计算,或则干脆去掉inner.measuer()

对于百分比流式布局的inner的大小让parent去控制,好来看一下。

override protected function measure():void{};

可以了。

原文地址:http://chaimzane.javaeye.com/blog/382411

转载于:https://www.cnblogs.com/myssh/archive/2010/09/01/1815102.html

Flex 流式布局 之 滚动条篇相关推荐

  1. android 仿快递步骤_【干货速递,建议收藏】Android 流式布局,一篇搞定

    今天我们来看Android的流式布局. 所谓流式布局指的是ViewGroup中同一行的宽度不足以容纳下一个子view时,进行换行处理,而不需要考虑子view的大小,每一行的高度以其中最高者为准. Ta ...

  2. HTML+CSS_第三部分(Flex弹性盒子布局、grid网格布局、移动端、移动端流式布局、移动端rem布局、响应式布局、Bootstrap框架)

    文章目录 (1)Flex弹性盒子布局 一: 父容器上的属性 1. display:flex 设置为弹性盒子(写在父容器上) 2.flex-direction值 设置子项的布局方向(写在父容器上) 3. ...

  3. 移动web现状、viewport视口、二倍图、移动web开发主流方案、布局技术选型(流式布局、flex弹性布局、less+rem+媒体查询布局、混合布局、媒体查询、bootstrap)

    移动端web现状: 移动端常见浏览器:UC浏览器,QQ浏览器,Opera浏览器,百度手机浏览器,360安全浏览器,谷歌浏览器,搜狗手机浏览器,猎豹浏览器及杂牌浏览器.移动端常见的浏览器都是基于webk ...

  4. Flutter: 弹性布局Flex(Expanded)、流式布局Wrap、Flow

    用Android原生实现流式布局[实现例如app的很多标签]需要自定义View继承自ViewGroup,然后代码量也不小. 相关自定义View实现流式布局,请参考这位老兄的博客: https://bl ...

  5. 移动web开发--移动端常见布局+流式布局和flex布局+携程网首页案例

    浏览器私有前缀 为了兼容老版本 私有前缀 -moz- : fixfox 浏览器私有属性 -ms- : ie浏览器私有属性 -webkit- : safari.chrome私有属性 -o- : Oper ...

  6. 移动端常见布局方式(流式布局、flex弹性布局、less+rem+媒体查询、Bootstrap)

    目录 一:移动端页面 1.流式布局(百分比布局) 2.flex弹性布局(重点♥) flex布局初体验: flex布局原理: flex布局父项常见属性 flex-direction 设置主轴的方向 ♥ ...

  7. CSS3——弹性盒模型-flex——等分布局、流式布局、圣杯布局(推荐阅读 很棒)

    1.等分布局: 中间固定两边自适应: 固定两个,一个自适应 2.流式布局: 模仿float浮动布局 3.圣杯布局:(自适应布局) 先来看一下结构布局: <div class="wrap ...

  8. CSS3——弹性盒模型-flex——等分布局、流式布局、圣杯布局

    1.等分布局: 中间固定两边自适应: 固定两个,一个自适应 2.流式布局: 模仿float浮动布局 3.圣杯布局:(自适应布局) 先来看一下结构布局: <div class="wrap ...

  9. 从上往下 流式布局_教大家怎么写前端布局

    一.静态布局(Static Layout) 1. 布局概念 最传统.原始的Web布局设计.网页最外层容器(outer)有固定的大小,所有的内容以该容器为标准,超出宽高的部分用滚动条(overflow: ...

最新文章

  1. MySQL优化篇:锁机制
  2. 依赖注入的几种形式及场景
  3. 让height: 100%生效
  4. 查看表字段信息 sql,mysql,oracle
  5. iOS 关于真机和模拟器framework合并
  6. 报警服务器物理内存,从内存告警谈ESXi主机内存管理——内存构成
  7. bat(续六)-windows批处理set命令
  8. utilities(C++)——Null类的设计
  9. mac安装win7之后鼠标失灵_苹果电脑装win7后键盘鼠标没有反应未响应的解决方法...
  10. 为你的Android应用构建窗口小部件(App Widget)
  11. 无线网卡被服务器禁用,wifi共享精灵无线网卡被禁用或被接管解决教程
  12. 最新计算机专业毕业设计论文选题源码演示录像下载(开题报告任务书PPT毕业答辩模板jsp352 cs拼图游戏的设计与实现
  13. stm32驱动rgb屏电路图_STM32直接驱动RGB接口的TFT数字彩屏设计
  14. Keras深度学习实战——信用预测
  15. 如何做好电脑重要文件数据的备份
  16. Java自学第6期——Collection、Map、迭代器、泛型、可变参数、集合工具类、集合数据结构、Debug
  17. pythonocc安装_PythonOCC安装步骤与注意事项
  18. 手机也能当门卡?!--NFC技术应用
  19. Nepxion Discovery【探索】微服务企业级解决方案
  20. 视频编辑器-MovieMator简洁使用-功能和快速入门-创建项目、导入和导出

热门文章

  1. LeetCode 1452. 收藏清单(std::includes判断子集)
  2. LeetCode 983. 最低票价(动态规划)
  3. 程序员面试金典 - 面试题 17.12. BiNode(BST中序遍历)
  4. LeetCode 43. 字符串相乘(大数乘法)
  5. 5.MongoDB索引
  6. python经典100例(21-40)
  7. 服务器select与gevent
  8. 李宏毅机器学习(八)自编码器(Auto-encoder)
  9. block在美团iOS的实践
  10. MCI:移动持续集成在大众点评的实践