У вас есть что-то вроде этого (поправьте меня, если я ошибаюсь):
<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, который занимает все свободное пространство, предоставленное его родительским контейнером top.Поэтому ваш внутренний компонент занимает все свободное пространство, предоставленное его родительским компонентом A. Когда размер верхнего контейнера изменяется, его дочерние элементы автоматически изменяют размер сами.
В чистом ActionScript соответствующие свойства равны percentHeight
и percentWidth
.
UPD
1) Проблема с размером B решается добавлением minWidth="10"
(или 0, или минимального размера, который вы хотите).Это вынуждает 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
будет правильно обрезаться, если они превышают родительский размер.