剪切和动态调整大小

时间:2011-08-24 12:37:01

标签: flex flex4

我有一个垂直布局的容器,里面有另外两个子容器“A”和“B”。

在第一个容器“A”中,有一个组件,我想根据可用的显示大小动态调整大小。
为此,我试着听主容器的调整大小事件并相应地采取措施。
在父容器达到裁剪尺寸之前有效:容器“B”比“A”更早被剪裁,因为它包含更多的东西:
 一旦父容器达到“B”的剪辑大小,它就不会再调整大小(因此也不再调整大小事件),从而阻止我更新组件在“A”中的显示。

任何指示都会非常感激。 感谢

1 个答案:

答案 0 :(得分:0)

你有这样的事情(纠正我,如果我错了):

<mx:VBox>
    <mx:VBox id="A" width="100%" height="100%">
        <CustomComponent id="component" width="100%" height="100%"/>
    </mx:VBox>
    <mx:VBox id="B"/>
</mx:VBox>

您无需侦听调整大小事件,Flex容器可以自动调整大小。通过为容器A和组件指定适当的百分比大小,可以达到调整大小布局的行为。这里有容器A,它占用了其父 - 顶容器提供的所有可用空间。因此,您的内部组件占用其父组件A提供的所有可用空间。当顶级容器调整大小时,其子组件将自动调整大小。

在纯ActionScript中,相应的属性为percentHeightpercentWidth

<强> UPD

1)通过添加minWidth="10"(或0或您想要的最小尺寸)来解决B大小的问题。这会强制B使用父容器调整大小,即使父级空间不足。

2)如果你想在自定义组件中做一些不同的布局,或者根据新的组件大小进行一些计算,你应该在自定义组件中覆盖函数“updateDisplayeList”:

override protected function updateDisplayList(unscaledHeight:Number, unscaledHeight:Number):void
{
    super.updateDisplayList(unscaledWidth, unscaledHeight);

    // your calculations
}

当组件需要刷新其大小和/或子位置时,Flex layoutManager会调用此函数。参数表示组件的可用空间。

有关Flex组件生命周期的更多信息:

3)某种脱离。

我有一种感觉,你只有VBox Labels,并且这些Labels不希望与其父级调整大小。通过为标签的minWidth分配一些小值来解决此问题 - 如果Labels超出父级大小,{{1}}将被正确截断。