Flex 布局的工作方式是让每个组件将其子组件布置为父组件指定的大小。“Children”确实包括通常的孩子——getChildren()、numChildren——以及构成边框、句柄等的那些组件,它们被称为“chrome”并且是getRawChildren() 的一部分。
Flex 框架现在对所有组件(实际上是显示树的一部分)进行两次循环。第一种是自下而上(首先是最深的嵌套元素)并调用 measure() 方法。它应该计算组件需要多少空间(宽度/高度),如果它可以拥有尽可能多的空间,没有限制(想想:滚动条)并将其放入 measureWidth 和 measureHeight 属性。其次,它计算它想要拥有多少空间作为绝对最小值,并将其放入measuredMinHeight/measuredMinWidth。为了计算这一点,使用 getExplicitOrMeasuredHeight()/Width() 询问边框厚度、镀铬和常规子项的大小,并将它们相加。这就是为什么它是深度优先的。
第二个循环是进行实际布局。这从树的顶部开始,然后调用 updateDisplayList,x/y 参数告诉组件它实际上有多少大小。基于此信息,组件将告诉其直接子级他们应该在哪里(相对于他们的父母)以及他们应该有多大 - child.move(x,y) 和 child.setActualSize(w,h)
所以实际上是父容器考虑了相对大小。您的组件在 measure() 中声明它是理想的(最小尺寸,以便可以显示所有内容)和最小尺寸,并且必须处理它在 updateDisplayList() 中获得的任何内容。父组件占用它拥有的可用空间,确保每个组件都获得它的最小尺寸,然后将其余部分分配给所有组件。在此阶段,它将查看其子项的 percentWidth/Height 属性。
所以如果你想把你的组件放在一个标准的 Flex 容器中,比如 HBox,你不需要做任何特殊的事情来让百分比大小起作用。