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

时间:2011-01-19 14:43:24

标签: flex components

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

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

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

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

此致 BS_C3


@Flextras

再次,非常感谢您的回答!这真的很详细=)

Measuredheight没有给我我正在寻找的值,而且explicitHeight没有值(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的高度才能定位Text。

该功能如下所示:

updateDisplay(){
    for(i;i<list.length;i++){
        VariableBox.addChild(new HBox);
    }
    // reposition Text depending on VariableBox's height
}

我知道我没有提供任何代码,但我现在不在我的工作电脑上&gt; _&lt;

希望这会有所帮助!!

2 个答案:

答案 0 :(得分:5)

简答:使用getMeasuredOrExplicitWidth()getMeasuredOrExplicitHeight()方法。

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

更长的回答: 你在用什么组件?由于您使用Flex标记了这一点,我将假设它是一个扩展UIComponent的Flex可视组件。

您需要查看一些不同的高度值,但请记住,父母负责确定其子项的大小。将子项添加到组件不一定会改变它的高度或宽度。这取决于您添加孩子的组件是否考虑到孩子。

首先看看measuredHeightmeasuredWidth。这些是使用测量方法计算的组件的优选尺寸值。某些组件(如HBox或VBox)会自动“识别”他们的孩子,并在计算其大小时使用这些组件。其他组件(例如UIComponent)在设置measuredHeight或measuredWidth时不考虑子项。

其次,您可以查看explicitHeight和explicitWidth。如果设置高度或宽度,则设置这些值。如果您使用setActualSize()方法,我不相信这些值已设置。引擎盖下有一些魔法,因此explicitHeightexplicitWidth被掩盖在高度和宽度后面。它们通常是相同的,但并非总是如此。

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

请记住,对于要在添加或删除子项后调整自身大小的组件,组件必须经历自己的生命周期。所以这段代码:

trace(container.width);
container.addChild(myChild);
trace(container.width);

可能不会更改容器的宽度,因为容器没有机会运行measure(),updateDisplayList()或commitProperties()方法。

如果这没有帮助,那么您将需要更具体并提供一些代码。

答案 1 :(得分:0)

最终解决方案:

我终于找到了一些令我满意的解决方法而不做一些奢侈的东西......

我有一个父容器,我动态添加了一些孩子,它的高度没有得到更新。我遇到的问题是,无论是测量高度,还是explicitHeight,高度,还是父容器的未缩放高度都给我了我想要的高度。

所以,我为每个孩子的creationComplete添加了一个监听器。创建完成事件一旦启动,就会考虑孩子的每个控制。此时,父容器的measuredHeight设置为期望值。所以我只需要设置:

parentContainer.height = parentContainer.measuredHeight

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

问候。