Apache flex 调用addChild后,Flex 4 UIComponent的宽度和高度保持为零

Apache flex 调用addChild后,Flex 4 UIComponent的宽度和高度保持为零,apache-flex,actionscript-3,uicomponents,addchild,Apache Flex,Actionscript 3,Uicomponents,Addchild,我有一个组件ObjectHolder,它扩展了UIComponent,它包含许多子组件UIComponents。但是,使用addChild()将这些子对象添加到ObjectHolder后,其宽度和高度保持为零。UIComponent是否可以自动扩展到包含子组件的大小 public class ObjectHolder extends UIComponent { public function ObjectHolder() { var c1:UICom

我有一个组件
ObjectHolder
,它扩展了
UIComponent
,它包含许多子组件
UIComponents
。但是,使用
addChild()
将这些子对象添加到
ObjectHolder
后,其宽度和高度保持为零。
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
    }
}

要更改组件的大小,您应该。但你也应该遵循其他的原则。在您的情况下,您应该在中创建并添加子组件。

要更改组件的大小,您应该。但你也应该遵循其他的原则。在您的情况下,应该在中创建并添加子组件

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
    }
}
正式答案是否定的。组件从不负责设置其自身的高度和宽度值;它只负责根据组件父级设置的值调整其子级的大小和位置

如果在组件中实现measure()方法,则可以使用它设置组件的measuredWidth和measuredHeight。本质上,这将是一个建议,您可以向父容器提供正确定位和调整所有子元素所需的理想大小。您自己的组件应该根据传入的unscaledWidth和unscaledHeight值在updateDisplayList()中调整大小和位置

大多数情况下,Flex默认容器将遵循这些大小值;尽管在某些情况下它们不会出现。例如,如果子容器需要的大小大于父容器的大小

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
    }
}
正式答案是否定的。组件从不负责设置其自身的高度和宽度值;它只负责根据组件父级设置的值调整其子级的大小和位置

如果在组件中实现measure()方法,则可以使用它设置组件的measuredWidth和measuredHeight。本质上,这将是一个建议,您可以向父容器提供正确定位和调整所有子元素所需的理想大小。您自己的组件应该根据传入的unscaledWidth和unscaledHeight值在updateDisplayList()中调整大小和位置


大多数情况下,Flex默认容器将遵循这些大小值;尽管在某些情况下它们不会出现。例如,如果子容器需要的大小大于父容器的大小

组件从不自行调整大小。实现measure()方法仅通过measuredHeight和measuredWidth属性向组件父容器提供“建议”。不过,大多数默认的Flex容器都会满足这些尺寸。@PeterBZ在本例中,在添加子容器后,您应该在下一帧中调用
invalidateSize()
哪个调用measure.@www.Flextras.com当然您是对的。但是,如果组件没有明确的尺寸,则所有布局容器或布局都依赖于
measure()
执行的测量。我想,就作者提出的这个问题而言,他并没有设置明确的大小。@PeterBZ在布局容器中布局组件时(在您的情况下,组件是
ObjectHolder
,容器是
Grid
),我想您有几种大小调整的可能性。您可以以像素为单位设置显式宽度或高度(我的意思是将其设置在
ObjectHolder
之外)。您可以设置百分比(
percentWidth
percentHeight
)。您可以设置最小和最大尺寸。所有这些值都考虑到了为什么要布局。而
measure()
是一种告诉容器组件想要的大小(所需大小)的方法。组件从不调整自身大小。实现measure()方法仅通过measuredHeight和measuredWidth属性向组件父容器提供“建议”。不过,大多数默认的Flex容器都会满足这些尺寸。@PeterBZ在本例中,在添加子容器后,您应该在下一帧中调用
invalidateSize()
哪个调用measure.@www.Flextras.com当然您是对的。但是,如果组件没有明确的尺寸,则所有布局容器或布局都依赖于
measure()
执行的测量。我想,就作者提出的这个问题而言,他并没有设置明确的大小。@PeterBZ在布局容器中布局组件时(在您的情况下,组件是
ObjectHolder
,容器是
Grid
),我想您有几种大小调整的可能性。您可以以像素为单位设置显式宽度或高度(我的意思是将其设置在
ObjectHolder
之外)。您可以设置百分比(
percentWidth
percentHeight
)。您可以设置最小和最大尺寸。所有这些值都考虑到了为什么要布局。而
measure()
是一种告诉容器组件想要的大小(所需大小)的方法。