0

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);


            }
        }
    }

そして、私のカスタムコンポーネントは、このレイアウトとさらに3つのレイアウトを使用しています。そのレイアウトはその場で変更される可能性があります。どちらのレイアウトを使用する場合でも、コンポーネントはその中のすべての要素をラップする必要があります。

このために、測定メソッドをオーバーライドして、コンポーネント内のコンポーネントに応じてコンポーネントのサイズを変更しようとしました。このように、その中のすべてのアイテムのボトムポイントを計算しようとしています。意外とすべての要素のy位置は0ですが、ご覧のとおり、レイアウトクラスでそれらの座標を設定しています。

    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);

使用するレイアウトに関係なく、コンポーネントがその中のすべての要素をラップするようにする正しい方法は何ですか?

4

1 に答える 1

0

フレックスコンポーネントのライフサイクルでは、measure()をupdateDisplayList()の前に1回呼び出します。したがって、コンポーネントのy位置は0です。updateDisplayList()のすべての要素にsetActualSize(width、height)を使用してみてください。

于 2013-03-25T13:25:32.083 に答える