通过自定义布局包装元素来灵活调整组件的大小



我有一个自定义的布局叫做NewsLayout:

    override public function updateDisplayList(width:Number, height:Number)
        : void
    {
        super.updateDisplayList( width, height );
        var layoutTarget:GroupBase = target;
        var element:ILayoutElement;
        for( var i:int = 0; i < layoutTarget.numElements; i++ )
        {
            element = layoutTarget.getElementAt( i );

            if(i==0){
                element.setLayoutBoundsSize( NaN, NaN );
                element.setLayoutBoundsPosition( 0, 0 );
            }
            else if(i==1)
            {
                var refEl = layoutTarget.getElementAt( 0 );
                element.setLayoutBoundsSize( NaN, NaN );
                element.setLayoutBoundsPosition( 0, refEl.height+5);
            }
            else if(i==2)
            {
                var refEl = layoutTarget.getElementAt( 0 );
                var refEl2 = layoutTarget.getElementAt( 1 );
                element.setLayoutBoundsSize( NaN, NaN );                    
                element.setLayoutBoundsPosition( Math.max(refEl2.width,refEl.width)+5, 0);

            }
        }
    }

我的自定义组件使用这个布局和另外三个。它的布局可能在飞行中改变。不管它使用哪种布局,我的组件都应该把所有的元素包裹在里面。

为此,我试图重写measure方法来根据它内部的组件调整组件的大小。我试图计算所有项目的底部点在它里面像这样。出乎意料的是,所有元素的位置都是0,但正如您所看到的,我在layout类中设置了它们的坐标。

    override protected function measure():void {
            super.measure(); var max= 0;
            for(var i=0 ; i < this.numElements;i++)
            {
                if((this.getElementAt(i).height +this.getElementAt(i).y) > max)
                    max = this.getElementAt(i).height + this.getElementAt(i).y;// here y position is 0
            }
            //this.height =this.measuredHeight;
            this.measuredHeight = max;
            this.height = max;
            trace("maxheight:"+max);

让组件包裹里面的所有元素的正确方法是什么,而不管它使用的布局是什么?

在flex组件生命周期中,measure()在updateDisplayList()之前调用一次;所以分量的y坐标为0;尝试使用setActualSize(宽度,高度)在updateDisplayList()中的所有元素。

最新更新