2013-03-25 62 views
0

包裝的元素我有被稱爲NewsLayout自定義佈局:的Flex大小的組件,如自定義佈局

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


      } 
     } 
    } 

而且我的自定義組件使用此佈局和三個。它的佈局可能會在飛行中改變。無論使用哪種佈局,我的組件都應該包含其中的所有元素。

爲此,我嘗試重寫度量方法以根據組件內部的組件調整其大小。我試圖計算它裏面所有項目的底點。意外地,所有元素的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); 

是什麼讓組件包裏面的所有元素,無論它採用了佈局的正確方法?

+0

您發佈的代碼嘗試將元素分組爲3行,並將行號預設爲元素。如果你想消除行號,並適合元素大小w.r.到容器請說吧。 – Ihsan 2013-03-25 12:11:43

回答

0

在flex組件生命週期measure()中調用一次,並在updateDisplayList()之前調用;所以你的組件的y位置爲0;嘗試對updateDisplayList()中的所有元素使用setActualSize(width,height)。