Flex 4: как получить фактическую ширину группы при использовании 100% и сверху / снизу / слева / справа? - PullRequest
0 голосов
/ 19 июля 2010

У меня есть приложение с шириной / высотой 100%.У меня есть несколько вложенных групп, и все их измерения не установлены, вместо этого они определены как top = 5 или left / right = 10 и т. Д.

Я пытаюсь получить фактическую группу, которая должна390. Я установил размер SWF-объекта равным 400 из HTML-кода для встраивания, и группа находится внутри другой группы, ширина = 100%.У группы слева = 5 и справа = 5, поэтому ширина должна быть 400-10.Когда я отображаю .width и .measuredWidth этой группы, ширина всегда равна 400.

Я довольно новичок в flex / flash.Нужно ли явно задавать ширину, чтобы получить ширину дочерних контейнеров?Я что-то здесь не так делаю?

Спасибо!

Ответы [ 4 ]

4 голосов
/ 26 ноября 2012

Размер компонента в процентах рассчитывается по родительскому значению updateDisplayList(), поэтому он доступен только через width & height.

Методы getExplicitOrMeasuredWidth/Height() могут возвращать следующее:

  1. Явная ширина / высота

Или

  1. Измеренная ширина / высота, когда режим установлен на Wrap. Это рассчитывается во время measure().

Если вы не планируете переопределять меру или updateDisplayList, вам просто не следует использовать getExplicit... вообще.

1 голос
/ 19 июля 2010

Используйте метод getExplicitOrMeasuredWidth() из UIComponent.Это возвращает явную ширину, если установлено (например, width = "700") или измеренную ширину (в пикселях), если нет.Если задана процентная ширина, возвращается фактическая измеренная ширина.

1 голос
/ 20 июля 2010

Оказывается, была внутренняя группа с путем, который отбрасывал макет. Когда я удалил этот элемент, свойство .width работало так же, как и раньше.

Одна вещь, которая удивила меня, это то, что .measuredWidth и getExplicitOrMeasuredWidth () оба вернули 10, когда .width вернул 390.

0 голосов
/ 19 июля 2010

Я верю, что он возвращает правильное значение. Если у вас есть приложение A, ширина 400. Затем вы помещаете в него группу B с шириной 100% и некоторыми отступами. Группа B действительно 400, потому что она простирается до краев приложения. Однако, давая ему left / right / padding / что угодно, он, в свою очередь, может настроить своих потомков, чтобы они не были так близко к краям. Возможно, вам придется искать максимальную ширину детей группы В., чтобы получить то, что вы хотите.

Обновление:

Согласно документации:

http://livedocs.adobe.com/flex/3/html/help.html?content=size_position_5.html

Использование макетов на основе ограничений переопределяет width и percentWidth. Попробуйте measuredWidth, хотя он не может быть заполнен, пока компонент не успел пройти фазу measure() во время аннулирования ...

...