Flex 流式布局 之 滚动条篇

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/495791.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

卷积神经网络为什么能称霸计算机视觉领域?

来源&#xff1a;图灵人工智能摘要&#xff1a;在机器视觉和其他很多问题上&#xff0c;卷积神经网络取得了当前最好的效果&#xff0c;它的成功促使我们思考一个问题&#xff0c;卷积神经网络为什么会这么有效&#xff1f;在本文中&#xff0c;将为大家分析卷积神经网络背后的…

Dom4j完整教程~Document对象相关

读取XML文件,获得document对象. SAXReader reader new SAXReader(); Document document reader.read(new File("input.xml")); 解析XML形式的文本,得到document对象. String text "<members></members>"; Document document Doc…

Python3.2+ 的 concurrent.futures 模块

concurrent.futures 官方文档&#xff1a;https://docs.python.org/3/library/concurrent.futures.html concurrent.futures: 线程池, 并发的处理任务&#xff1a;https://www.h3399.cn/201906/703751.html IO 密集型 vs 计算密集型&#xff1a; IO密集型&#xff1a;读取文件…

C# 判断一字符串是否为合法数字(正则表达式)

代码 ///<summary>///判断一个字符串是否为合法整数(不限制长度) ///</summary>///<param name"s">字符串</param>///<returns></returns>publicstaticboolIsInteger(strings) { stringpattern "…

关于现在人工智能预测的一些冷水

来源&#xff1a;人工智能和大数据 作者&#xff1a;田渊栋最近有关人工智能和深度学习的各种预测满天飞&#xff0c;作为圈内人&#xff0c;我来泼点冷水。我们常说科技树科技树&#xff0c;这个比喻是非常贴切的&#xff0c;现代科技的基础理论并不复杂&#xff0c;做个摘要…

Dom4j完整教程~节点相关

获取文档的根节点. Element rootElm document.getRootElement(); 取得某节点的单个子节点. Element memberElmroot.element("member");// "member"是节点名 取得节点的文字 String textmemberElm.getText(); String textroot.elementTe…

Windows10 下搭建汇编语言开发环境( 利用 DOSBOX 和 MASM32 )

Windows10下搭建汇编语言开发环境&#xff08;利用DOSBOX和MASM32&#xff09;&#xff1a;https://www.cnblogs.com/zyever/p/7919007.html 如何在win10 64位下搭载汇编环境&#xff08;包含汇编dosbox和masm文件&#xff09;&#xff1a;https://blog.csdn.net/xyisv/articl…

一文解读“边缘计算” 和物联网的亲密关系!

来源&#xff1a;IT技术之家摘要&#xff1a;物联网的最终目标是万物互联&#xff0c;而边缘计算是解决当前云计算所面对的数据传输问题所应用的主要方式&#xff0c;相对于云计算&#xff0c;有更大的优势。物联网的最终目标是万物互联&#xff0c;而当前对于宽带水平来说&…

动态生成lookup字段

var i: Integer;begin //ADOQuery已打开 //在数据集打开的情况下新增加一个字段 with Self.ADOQuery1 do begin TDataSetDesigner.Create(Self.ADOQuery1); try Designer.BeginDesign; //Keep Old Field //保留旧的字段 Designer.DataSet.Fiel…

Dom4j完整教程~CDATA详解

所有 XML 文档中的文本均会被解析器解析。 只有 CDATA 区段&#xff08;CDATA section&#xff09;中的文本会被解析器忽略。 PCDATA PCDATA 指的是被解析的字符数据&#xff08;Parsed Character Data&#xff09;。 XML 解析器通常会解析 XML 文档中所有的文本。 当某个…

寄存器 和 存储器

From&#xff1a;https://blog.csdn.net/menshu1892/article/details/79912090 一、计算机硬件 先说内核&#xff1a;内核是操作系统最基本的部分。它是为众多应用程序提供对计算机硬件的安全访问的一部分软件&#xff0c;这种访问是有限的&#xff0c;并且内核决定一个程序在什…

博文视点大讲堂36期——让Oracle跑得更快 成功举办

博文视点大讲堂36期——让Oracle跑得更快 成功举办 电子工业出版社博文视点公司于2010年9月日在西单图书大厦成功举办“博文视点大讲堂36期——让Oracle跑得更快”讲座。8月22日&#xff0c;博文视点大讲堂为配合《让Oracle跑得更快—Oracle 10g性能分析与优化思路》的全国热销…

NLP 解决方案是如何被深度学习改写的?

作者&#xff1a;杨晓凡摘要&#xff1a;英特尔人工智能产品事业部&#xff0c;数据科学主任 Yinyin Liu 近日撰写了一篇文章&#xff0c;介绍了深度学习为自然语言处理带来的种种变化。有趣的大趋势是首先产生在 CV 领域的技术也不断用于 NLP&#xff0c;而深度学习解决方案的…

CompletableFuture详解~思维导图

#原图 System.out.println("https://www.processon.com/view/621a1b361e08533fc3afaa44?fromnew1");

如何在SharePoint 2010项目中引用UserProfiles.dll

如果需要进行SharePoint的UserProfile开发的话&#xff0c;我们需要引用以下程序集&#xff1a; C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\ISAPI\Microsoft.Office.Server.UserProfiles.dll在添加引用的时候&#xff0c;Visual Studio 2010会…

汇编中各寄存器的作用(16位CPU14个,32位CPU16个)和 x86汇编指令集大全(带注释)

From&#xff1a;https://www.cnblogs.com/zimmerk/articles/2520011.html From&#xff1a;https://blog.csdn.net/bjbz_cxy/article/details/79467688 汇编寄存器功能详解&#xff1a;https://wenku.baidu.com/view/14ef15857cd184254a353586.html 寄存器、汇编命令详解&am…

斯坦福大学科学家研发微型植入式神经刺激器

来源&#xff1a;IEEE电气电子工程师协会实现使用可读生命体征传感器和可控制的植入器来装备我们的身体&#xff0c;就仿佛科幻小说中描述的一般&#xff0c;而事实上&#xff0c;这远比你想象中的要更接近现实。斯坦福大学最近研发出一款微型植入式神经刺激器&#xff0c;只有…

PPT演示力~思维导图

#原图 System.out.println("https://www.processon.com/view/6222dcb1e0b34d07287d09c6?fromnew1");

靠云计算翻身的微软正在“挑衅”亚马逊AWS

来源&#xff1a;第一财经摘要&#xff1a;凭借云计算业务“回春”的老牌科技企业微软还在继续享受转型的福利。微软最新发布的财报显示&#xff0c;云计算业务依然是公司目前业务最大的功臣。北京时间4月27日&#xff0c;微软发布的2018财年第三季度财报显示&#xff0c;在截止…

点击windows live writer无反应 / 使用windows live writer的前提

重装系统之后 点击安装好的 windows live writer 无任何反应,其实是因为我们没有安装.net framework支持库. 技术人员的话 很好解决的 ,装个vs2005,sql2008,vs2008这些软件都会帮你自动装一个.net framework支持库的。转载于:https://www.cnblogs.com/naniannayue/archive/201…