Flex: как получить ширину реальных объектов? - PullRequest
1 голос
/ 03 мая 2010

когда я проверяю ширину своих объектов, я всегда получаю 0. Вот пример:

newTag = new LinkButton();
newTag.label = dataManager.tagViewTimelineModel.tags.getItemAt(i).name;
newTag.setStyle("color","#FFA500");
newTag.setStyle("rollOverColor","#FFA500");
newTag.setStyle("selectionColor","#CCCCCC");
newTag.toolTip ="Unselect tag";
newTag.setStyle("fontSize",16); 

Alert.show(newTag.width); //This is 0

Полагаю, ширина - это свойство, которое я могу установить, но оно не вычисляется автоматически Flex. Как я могу узнать, насколько велики мои объекты (как следствие включенного текста?)

спасибо

Ответы [ 3 ]

2 голосов
/ 03 мая 2010

Flex автоматически вычисляет ширину, однако она устанавливается во время жизненного цикла компонента Flex, поэтому она не всегда доступна сразу после создания компонента.

Вы хотите прочитать о жизненном цикле компонента: http://livedocs.adobe.com/flex/3/html/help.html?content=ascomponents_advanced_2.html

http://flexcomps.wordpress.com/2008/05/09/flex-component-life-cycle/

И, в частности, в текстовых полях flex ведет себя немного странно, вам может потребоваться использовать textWidth, а не width, или принудительно вызвать validateNow (), чтобы убедиться, что он измерен, но вы захотите используйте эту технику экономно и осторожно. http://www.colettas.org/?p=89

Как правило, вам нужно подождать, пока жизненный цикл компонента не вызовет «measure», чтобы получить ширину компонента, и любой макет, который вы делаете с этой шириной, должен выполняться в updateDisplayList (), а не сразу после создания компонентов.

1 голос
/ 03 мая 2010

Размер и расположение компонента всегда задаются его родителем. В своем коде вы еще не добавили LinkButton к контейнеру, и поэтому он еще не будет иметь размер. В этом случае ширина и высота всегда будут равны нулю.

Как только вы добавите его в качестве дочернего к родителю, он начнется через жизненный цикл компонента. Он вызовет mesaure (), чтобы определить его значения measureHeight и measureWidth. Родитель сам решает, использовать измеренную высоту или измеренную ширину или нет. Обычно это делается в updateDisplayList ().

Если вы используете контейнер Flex по умолчанию, у него, вероятно, уже есть методы для измерения его дочерних элементов; и вам нужно только побеспокоиться о том, чтобы добавить его в детстве.

Однако имейте в виду, что жизненный цикл должен пройти, прежде чем он будет иметь ширину или высоту. Вы не можете добавить addChild и сразу же ожидать ненулевые значения.

0 голосов
/ 10 января 2011

Да, это верно. Ширина компонента БУДЕТ вычислена после того, как вы установите текст - он просто перейдет к следующему обновлению экрана. То, что вы могли бы сделать, это:

private function showWidth():void {
   Alert.show(newTag.width);
}

callLater(showWidth);

Метод callLater () - откладывает вызов функции до следующего обновления экрана.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...