2011-08-25 83 views
0

我有一个组件ObjectHolder,它扩展了UIComponent,它包含许多子项UIComponents。但是,在使用addChild()将这些孩子添加到ObjectHolder后,其宽度和高度保持为零。 UIComponent是否可以自动扩展到其包含的子组件的大小?Flex 4在调用addChild后,UIComponent的宽度和高度保持为零

public class ObjectHolder extends UIComponent 
{  
    public function ObjectHolder() 
    { 
     var c1:UIComponent = new UIComponent(); 
     c1.graphics.beginFill(0xffffff); 
     c1.graphics.drawRect(0, 0, 100, 100); 
     addChild(c1); 
     trace(this.width); // Displays zero 
    } 
} 

回答

2

要更改组件的大小,您应该implement measure() method。但你也应该遵循其他recommendations on creating custom components。在你的情况下,你应该在createChildren() method中创建并添加子组件。

+0

组件不会自行调整大小。实现measure()方法仅通过measuredHeight和measuredWidth属性向组件父容器提供“建议”。不过,大多数默认的Flex容器都会遵守这些尺寸。 – JeffryHouser

+0

我阅读了有关measure()方法的内容,但不是在调用addChild()后立即调用它。由于组件是动态添加的,我不能真正重写createChildren()方法。 – peter

+0

@ www.Flextras.com:我没有使用Flex容器,“容器”是一个UIComponent。 Flex容器是否自动扩展到包含子容器的大小? “容器”UIComponent是一个Floorplan网格,因此用户基本上可以动态地将对象添加到“底层”(类似于在Photoshop画布中添加图像和形状) – peter

1

UIComponent是否可以自动扩展为包含其子组件的大小 ?

正式答案是否定的。组件从不负责设置它自己的高度和宽度值;它只负责根据该组件的父级设置的值确定其子级的大小和位置。

如果您在组件中实施measure()方法,则可以使用它来设置组件的measuredWidth和measuredHeight。实质上,这将建议您向父母的容器提供什么样的理想尺寸,以便正确定位和调整所有子元素的大小。应根据传入的unscaledWidth和unscaledHeight值,将自己的组件的大小和位置放入updateDisplayList()。

大多数情况下,Flex默认容器将遵守这些大小值;虽然有些情况下他们不会。例如,如果子容器需要的大小大于父容器的大小。

相关问题