Actionscript 3 柔性-自定义构件-宽度/高度百分比

Actionscript 3 柔性-自定义构件-宽度/高度百分比,actionscript-3,flex3,components,custom-component,Actionscript 3,Flex3,Components,Custom Component,我正在尝试使用Flex组件框架创建自定义Flex组件: 所有良好的零部件都允许您使用以下百分比值定义其尺寸: MXML: text输入宽度=“100%” 或 运行时的Actionscript: textinp.percentWidth=100 我的问题是如何在自定义组件的measure()方法中实现宽度/高度百分比?更具体地说,这些百分比在某个阶段被转换为像素值,这是如何实现的?Flex布局的工作方式是让每个组件按照父组件指定的大小布局其子组件。“Children”确实包括常见的子项getCh

我正在尝试使用Flex组件框架创建自定义Flex组件:

所有良好的零部件都允许您使用以下百分比值定义其尺寸:

MXML:

text输入宽度=“100%”

运行时的Actionscript:

textinp.percentWidth=100


我的问题是如何在自定义组件的measure()方法中实现宽度/高度百分比?更具体地说,这些百分比在某个阶段被转换为像素值,这是如何实现的?

Flex布局的工作方式是让每个组件按照父组件指定的大小布局其子组件。“Children”确实包括常见的子项getChildren()、numChildren,以及构成边框、句柄等的组件,这些组件称为“chrome”,是getRawChildren()的一部分

Flex框架现在对所有组件(实际上是显示树的一部分)执行两个循环。第一个是自底向上(首先是嵌套最深的元素)并调用measure()方法。它应该计算组件将占用多少空间(宽度/高度),如果它可以拥有它想要的空间,没有限制(想想:滚动条),并将其放入measuredWidth和measuredHeight属性中。其次,它计算出作为绝对最小值,它希望有多少空间,放入measuredMinHeight/measuredMinWidth中。为了计算这一点,我们使用getExplicitOrMeasuredHeight()/Width()询问了border thickness、chrome和普通儿童的尺寸,并将其相加。这就是为什么它是深度优先

第二个循环是进行实际布局。这从树的顶部开始,并调用updateDisplayList,x/y参数告诉组件它实际有多大尺寸。基于此信息,组件将告诉其直接子级它们应该在哪里(相对于它们的父级)以及它们应该有多大-child.move(x,y)和child.setActualSize(w,h)

所以实际上是父容器考虑了相对大小。您的组件在measure()中声明它是理想的(最小大小以便可以显示所有内容)和最小大小,并且必须处理它在updateDisplayList()中得到的任何内容。父组件获取其拥有的可用空间,确保每个组件获得其最小大小,然后将剩余空间分配给所有组件。在此阶段,它将查看其子对象的percentWidth/Height属性

所以,如果你想把你的组件放在一个标准的Flex容器中,比如HBox,你不需要做任何特殊的事情来让百分比大小起作用