0

我做了大量的研究并阅读了Adob​​e Live Docs,直到我的眼睛流血试图弄清楚这一点。

我在 ActionScript 中构建一个复合自定义组件,并希望子控件水平布局。通过将它们HGroup添加到组件中并将 HGroup 添加到组件中,这可以正常工作,问题来自基于百分比的大小调整。

我需要_horizontalGroup:HGroup根据容器的大小自行调整大小。

单步执行代码显示每个 UIComponent 的父属性是...

  • _horizo​​ntalGroup.parent = ReportGridSelector
  • ReportGridSelector.parent = grpControls

如果 grpControls 有明确的大小,那么 ReportGridSelector 不应该也有它的大小吗?

自定义组件是这样实现的...
注意:ReportControl 扩展 UIComponent 并且不包含大小调整逻辑

public class ReportGridSelector extends ReportControl{

  /*other display objects*/
  private var _horizontalGroup:HGroup;

    public function ReportGridSelector(){
        super();
        percentHeight = 100;
        percentWidth = 100;
    }

    override protected function createChildren():void{

        super.createChildren();

        if(!_horizontalGroup){
            _horizontalGroup = new HGroup();

            //I WANT SIZE BY PERCENTAGE, BUT THIS DOESN'T WORK
            _horizontalGroup.percentWidth = 100;
            _horizontalGroup.percentHeight = 100;

            //EXPLICITLY SETTING THEM WORKS, BUT IS STATIC :-(
            //_horizontalGroup.width = 200;
            //_horizontalGroup.height = 200;
            addChild(_horizontalGroup);
        }
    }
}

使用 MXML 代码

<?xml version="1.0" encoding="utf-8"?> 
<s:VGroup id="grpControls" width="200" height="200">
     <ReportControls:ReportGridSelector width="100%" height="100%"/>
</s:VGroup>

如果我明确定义_horizontalGroup'swidthheight属性,一切都显示正常。如果我尝试_horizontalGroup.percentWidthor percentHeight,所有控件都会被压缩在一起。

关于发生了什么的任何想法?

4

1 回答 1

1

当显示列表从 updateDisplayList 失效时执行布局。

override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void
{
    super.updateDisplayList(unscaledWidth, unscaledHeight);

    _horizontalGroup.width = unscaledWidth;
    _horizontalGroup.height = unscaledHeight;
}

了解 Flex 组件生命周期:

http://livedocs.adobe.com/flex/3/html/help.html?content=ascomponents_advanced_2.html

创造儿童

创建组件的任何子组件。例如,ComboBox 控件包含一个 TextInput 控件和一个 Button 控件作为子组件。

有关更多信息,请参阅实现 createChildren() 方法。

更新显示列表

根据所有先前的属性和样式设置在屏幕上调整组件子项的大小和位置,并绘制组件使用的任何皮肤或图形元素。组件的父容器决定了组件本身的大小。

于 2012-05-24T02:48:11.523 回答