flex 動態創建組件之容器自適應大小

flex 動態創建組件之容器自適應

爲了節約swf文件的大小,可以採取動態創建組件的方式,那麼動態創建組件就要考慮到組件容器自適應大小。
比如:
<s:BorderContainer x="5" y="5" width="100%"  right="5" left="5" 
        autoLayout="true" id="bc">
  <s:layout >
   <s:TileLayout />
  </s:layout>
 </s:BorderContainer>
我要在上邊這個容器裏動態裝入一些組件,很有可能容器的高度不夠裝下多個組件,這個時候,就要讓程序動態的改變容器的大小。
改變容器的大小可以根據添加的最後一個組件的top和height來決定,那麼我們什麼時候才能獲取得最後一個組件的大小呢?看下邊的代碼:

public function init():void{
    var user:TblBsUserType = new TblBsUserType();
    function initFormItem(label:String,porp:String):FormItem{
     var fi:FormItem  =ElementFactory.createFormItem(label,user,porp);
     fi.setStyle("paddingTop",10);
     fi.setStyle("paddingLeft",20);
     bc.addElement(fi);
     return fi;
    }

    initFormItem("用戶編碼:","butyId");
    initFormItem("用 戶 名:","butyName");
    initFormItem("用戶密碼:","butyPassword");
    var fi:FormItem=initFormItem("用戶角色:","butySate");
  //注意下邊這種方式可以設置bc的高度嗎???
     bc.height =fi.top+ fi.height+10;
}

如果動態創建組件,那麼直接獲取組件的高度是不行的。像上邊這種情況,fi.height的值多數情況是0.
其實根據flex組件的生命週期,我們知道只有在creationComplete事件的時候,組件才完成了它所有的初始化工作,包括組件的位置,樣式,大小等信息。所以,要想獲得組件的高寬,我們應該在creationComplete事件中來完成這個任務。所以上邊
bc.height=fi.top+fi.height+10;
應該修改爲:
fi.addEventListener("creationComplete",function(){
     bc.height =fi.top+ fi.height+10;
    });
這樣纔可以正確設置父容器的高度。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章