爲了節約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;
});
這樣纔可以正確設置父容器的高度。