Apache flex Flex 3-获取组件的实际大小

Apache flex Flex 3-获取组件的实际大小,apache-flex,components,Apache Flex,Components,我想在添加一些子元素后获得组件的实际高度 在调试模式下检查变量选项卡时,我看到两个不同的高度变量: $height(包含正确的值:138)和height/_height(包含错误的值:10) 我猜显示没有更新,因此我没有使用component.height获得正确的高度,但是如何才能获得$height中的值 感谢您提供的任何帮助=) 问候,, 学士学位C3 @Flextras 再次感谢你的回答!那真的很详细() 测量的高度并没有给我我想要的值,明确地说光没有价值(NaN)。我现在不能测试,所以

我想在添加一些子元素后获得组件的实际高度

在调试模式下检查变量选项卡时,我看到两个不同的高度变量: $height(包含正确的值:138)和height/_height(包含错误的值:10)

我猜显示没有更新,因此我没有使用component.height获得正确的高度,但是如何才能获得$height中的值

感谢您提供的任何帮助=)

问候,, 学士学位C3


@Flextras

再次感谢你的回答!那真的很详细()

测量的高度并没有给我我想要的值,明确地说光没有价值(NaN)。我现在不能测试,所以我不能判断是否有不规则的重量

以下是我所拥有的结构:

MainContainer - Canvas
    BOX1 - Canvas (height = 100)
    BOX2 - Canvas (height = 100)
    VariableBox - Canvas (height: depends on the height of it's variable number of children)
    Text - TextArea
我需要VariableBox的高度来定位文本

函数如下所示:

updateDisplay(){
    for(i;i<list.length;i++){
        VariableBox.addChild(new HBox);
    }
    // reposition Text depending on VariableBox's height
}
updateDisplay(){
对于(i;i简短回答:使用和方法

在许多情况下,or将返回与这些方法相同的值

详细回答: 您使用的是什么组件?因为您用Flex标记了它,所以我假设它是一个扩展UIComponent的Flex可视组件

您可以查看几个不同的高度值,但请记住,父级始终有责任调整其子级的大小。将子级添加到组件中不一定会改变其高度或宽度。这取决于您将子级添加到的组件是否考虑了子级

首先查看和。这些是使用测量方法计算的组件的首选大小值。某些组件(如HBox或VBox)将自动“感知”,并将在计算其大小时使用这些。其他组件(如UIComponent)在设置测量高度或测量宽度时不考虑子级

第二,您可以查看ExplicitheLight和explicitWidth。如果您设置了高度或宽度,那么这些值就设置好了。我不相信如果您使用setActualSize()方法,这些值就设置好了。引擎盖下有一些魔法,因此和被隐藏在高度和宽度后面。它们通常是相同的,但并不总是相同的

我通常不处理缩放问题,但是如果您需要组件的未缩放高度和宽度,那么组件的属性和受保护的属性是有区别的。我相信这些是传递给updateDisplayList()方法的值

请记住,要使组件在添加或删除子组件后调整自身大小,该组件必须经历其自身的生命周期。因此,以下代码:

trace(container.width);
container.addChild(myChild);
trace(container.width);
可能不会更改容器的宽度,因为容器没有机会运行measure()、updateDisplayList()或commitProperties()方法

如果这样做没有帮助,您将不得不更加具体并提供一些代码。

简短回答:使用和方法

在许多情况下,or将返回与这些方法相同的值

详细回答: 您使用的是什么组件?因为您用Flex标记了它,所以我假设它是一个扩展UIComponent的Flex可视组件

您可以查看几个不同的高度值,但请记住,父级始终有责任调整其子级的大小。将子级添加到组件中不一定会改变其高度或宽度。这取决于您将子级添加到的组件是否考虑了子级

首先查看和。这些是使用测量方法计算的组件的首选大小值。某些组件(如HBox或VBox)将自动“感知”,并将在计算其大小时使用这些。其他组件(如UIComponent)在设置测量高度或测量宽度时不考虑子级

第二,您可以查看ExplicitheLight和explicitWidth。如果您设置了高度或宽度,那么这些值就设置好了。我不相信如果您使用setActualSize()方法,这些值就设置好了。引擎盖下有一些魔法,因此和被隐藏在高度和宽度后面。它们通常是相同的,但并不总是相同的

我通常不处理缩放问题,但是如果您需要组件的未缩放高度和宽度,那么组件的属性和受保护的属性是有区别的。我相信这些是传递给updateDisplayList()方法的值

请记住,要使组件在添加或删除子组件后调整自身大小,该组件必须经历其自身的生命周期。因此,以下代码:

trace(container.width);
container.addChild(myChild);
trace(container.width);
可能不会更改容器的宽度,因为容器没有机会运行measure()、updateDisplayList()或commitProperties()方法

如果这没有帮助,您将不得不更加具体,并提供一些代码。

最终解决方案:

我终于找到了一些让我满意的方法,不用做一些奢侈的事情

我有一个父容器,我正在动态地向其中添加一些子容器,它的高度没有得到更新。我遇到的问题是,无论是测量的高度,还是明确的高度,或者是父容器的高度,或者是未标度的高度,都没有给我想要的高度

因此,我为每个子容器的creationComplete添加了一个侦听器。一旦启动creation complete事件,子容器的每个控件都会被考虑。此时,父容器的measuredHeight设置为预期值。因此我只需要设置:

parentContainer.height = parentContainer.measuredHeight
再次感谢Flextras提供了一些有用的信息=)

关于。

最终解决方案:

我终于找到了一些让我满意的方法,不用做一些奢侈的事情

我有一个父容器,动态地向其中添加一些子容器,它是h