Обновить размер UIComponent - PullRequest
       4

Обновить размер UIComponent

0 голосов
/ 23 февраля 2010

Я создал класс AS3, который расширяет UIComponent, так что я могу легко добавить его в свой макет MXML. Это работает нормально, но я пытаюсь выяснить, как динамически обновлять ширину и высоту UIComponent. Я хочу, чтобы мой супер UIComponent рисовал границу вокруг контента, поэтому для этого мне нужно получить конкретные измерения контента.

Я понимаю, что идея UIComponent заключается в том, что вы должны специально устанавливать ширину и высоту ... но я буквально только расширяю ее, чтобы я мог легко использовать свой пользовательский компонент с MXML.

Есть ли способ, с помощью которого я могу получить ширину и высоту содержимого UIComponents?

Спасибо

Ответы [ 2 ]

1 голос
/ 24 февраля 2010

Как Робусто описал в своем комментарии, Canvas - лучший выбор, если вы пытаетесь добавить к нему детей. Canvas создает экземпляр CanvasLayout , который обрабатывает всю сложную логику для определения размеров себя и дочерних элементов.

Ширина и высота содержимого UIComponent определяется с помощью метода measure(), , если для UIComponent не определены явные или процентные размеры. Мера - это один из тех методов, которые недостаточно хорошо документированы. Я предлагаю Дайвинг вглубь жизненного цикла компонентов Flex с EffectiveUI. Они идут в методы жизненного цикла и действительно объясняют, как их использовать.

Метод measure() вызывается, если родительский элемент (ваш компонент) не имеет определенного размера. Затем он просматривает все свои дочерние элементы, вычисляет их размеры и суммирует их в measuredWidth и measuredHeight. Размер родительского элемента затем устанавливается на эти значения.

Если вы расширяете UIComponent, вам придется многое сделать в методе measure, чтобы обработать все граничные случаи: явный, процент, ограничения (верх, слева ...), заполнение, независимо от того, включен или нет includeInLayout = true, и т.д. Canvas делает все это. То же самое с другими компонентами контейнера: Box, HBox, VBox, List и т. Д.

Надеюсь, это поможет, Lance

1 голос
/ 23 февраля 2010

Не уверен, что вы подразумеваете под "контентом" вашего UIComponent. Вы имеете в виду измерения UIComponent или дочерний контейнер?

Одним из мест, где можно найти размер любого компонента, является его метод updateDisplayList, который представляет собой защищенный метод, который вам придется переопределить, например:

override protected function updateDisplayList(width:Number, height:Number) {
  super.updateDisplaylist(width, height);
  // your statements here
}

Вы говорите, что расширяете UIComponent только для того, чтобы вы могли использовать свой пользовательский компонент "с MXML легко". Но вам все равно нужно расширять его настолько, насколько вам нужно, чтобы делать то, что вам нужно. Для этого вы должны узнать о жизненном цикле компонента, когда нужно перезаписать методы createChildren (), commitProperties (), measure () и другие, и так далее. Это действительно не сложно, и вы уже сделали первый шаг. Удачи!

...