我有一个垂直布局的容器,里面有另外两个子容器“A”和“B”。
在第一个容器“A”中,有一个组件,我想根据可用的显示大小动态调整大小。
为此,我试着听主容器的调整大小事件并相应地采取措施。
在父容器达到裁剪尺寸之前有效:容器“B”比“A”更早被剪裁,因为它包含更多的东西:
一旦父容器达到“B”的剪辑大小,它就不会再调整大小(因此也不再调整大小事件),从而阻止我更新组件在“A”中的显示。
任何指示都会非常感激。 感谢
答案 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中,相应的属性为percentHeight
和percentWidth
。
<强> 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}}将被正确截断。