Flex:如何获得真实物体的宽度?

时间:2010-05-03 14:30:25

标签: flex

当我检查对象的宽度时,我总是得到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

我猜因为width是我可以设置的属性,但它不是由Flex自动计算的。我怎么知道我的物体有多大(作为包含文字的结果?)

感谢

3 个答案:

答案 0 :(得分:2)

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()中完成,而不是在创建组件后立即完成。 / p>

答案 1 :(得分:1)

组件的大小和位置始终由该组件的父级设置。在您的代码中,您还没有将LinkBut​​ton添加到容器中,因此它还没有大小。在这种情况下,宽度和高度始终为零。

将它作为子项添加到父项后,它将从组件生命周期开始。它会调用mesaure()来定义它的measuredHeight和measuredWidth值。由父母决定是否使用measuredHeight或measuredwidth。这通常在updateDisplayList()中完成。

如果您使用的是默认的Flex容器,它可能已经有方法来调整它的子容量;而你只需要担心在孩提时加入它。

但是,请记住,生命周期必须在宽度或高度之前运行。您不能addChild并立即期望非零值。

答案 2 :(得分:0)

是的,这是正确的。设置文本后,将计算组件的宽度 - 它只需要进行下一次屏幕更新。你能做的是:

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

callLater(showWidth);

“callLater()” - 方法会延迟对函数的调用,直到下一次屏幕更新为止。

希望这有帮助