当我检查对象的宽度时,我总是得到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自动计算的。我怎么知道我的物体有多大(作为包含文字的结果?)
感谢
答案 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)
组件的大小和位置始终由该组件的父级设置。在您的代码中,您还没有将LinkButton添加到容器中,因此它还没有大小。在这种情况下,宽度和高度始终为零。
将它作为子项添加到父项后,它将从组件生命周期开始。它会调用mesaure()来定义它的measuredHeight和measuredWidth值。由父母决定是否使用measuredHeight或measuredwidth。这通常在updateDisplayList()中完成。
如果您使用的是默认的Flex容器,它可能已经有方法来调整它的子容量;而你只需要担心在孩提时加入它。
但是,请记住,生命周期必须在宽度或高度之前运行。您不能addChild并立即期望非零值。
答案 2 :(得分:0)
private function showWidth():void {
Alert.show(newTag.width);
}
callLater(showWidth);
“callLater()” - 方法会延迟对函数的调用,直到下一次屏幕更新为止。
希望这有帮助