2013-03-25 2 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

ответ

0

В случае измерения цикла жизненного цикла Flex() один раз и до updateDisplayList(); Таким образом, ваши компоненты имеют y-позицию как 0; Попробуйте использовать setActualSize (ширина, высота) для всех элементов updateDisplayList().