Как Робусто описал в своем комментарии, Canvas - лучший выбор, если вы пытаетесь добавить к нему детей. Canvas создает экземпляр CanvasLayout , который обрабатывает всю сложную логику для определения размеров себя и дочерних элементов.
Ширина и высота содержимого UIComponent определяется с помощью метода measure()
, , если для UIComponent не определены явные или процентные размеры. Мера - это один из тех методов, которые недостаточно хорошо документированы. Я предлагаю Дайвинг вглубь жизненного цикла компонентов Flex с EffectiveUI. Они идут в методы жизненного цикла и действительно объясняют, как их использовать.
Метод measure()
вызывается, если родительский элемент (ваш компонент) не имеет определенного размера. Затем он просматривает все свои дочерние элементы, вычисляет их размеры и суммирует их в measuredWidth
и measuredHeight
. Размер родительского элемента затем устанавливается на эти значения.
Если вы расширяете UIComponent, вам придется многое сделать в методе measure
, чтобы обработать все граничные случаи: явный, процент, ограничения (верх, слева ...), заполнение, независимо от того, включен или нет includeInLayout = true, и т.д. Canvas делает все это. То же самое с другими компонентами контейнера: Box, HBox, VBox, List и т. Д.
Надеюсь, это поможет,
Lance