為了節(jié)約swf文件的大小,可以采取動(dòng)態(tài)創(chuàng)建組件的方式,那么動(dòng)態(tài)創(chuàng)建組件就要考慮到組件容器自適應(yīng)大小。
比如:
<s:BorderContainer x="5" y="5" width="100%" right="5" left="5"
autoLayout="true" id="bc">
<s:layout >
<s:TileLayout />
</s:layout>
</s:BorderContainer>
我要在上邊這個(gè)容器里動(dòng)態(tài)裝入一些組件,很有可能容器的高度不夠裝下多個(gè)組件,這個(gè)時(shí)候,就要讓程序動(dòng)態(tài)的改變?nèi)萜鞯拇笮 ?br />
改變?nèi)萜鞯拇笮】梢愿鶕?jù)添加的最后一個(gè)組件的top和height來決定,那么我們什么時(shí)候才能獲取得最后一個(gè)組件的大小呢?看下邊的代碼:

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");
//注意下邊這種方式可以設(shè)置bc的高度嗎???
bc.height =fi.top+ fi.height+10;
}
如果動(dòng)態(tài)創(chuàng)建組件,那么直接獲取組件的高度是不行的。像上邊這種情況,fi.height的值多數(shù)情況是0.
其實(shí)根據(jù)flex組件的生命周期,我們知道只有在creationComplete事件的時(shí)候,組件才完成了它所有的初始化工作,包括組件的位置,樣式,大小等信息。所以,要想獲得組件的高寬,我們應(yīng)該在creationComplete事件中來完成這個(gè)任務(wù)。所以上邊
bc.height=fi.top+fi.height+10;
應(yīng)該修改為:
fi.addEventListener("creationComplete",function(){
bc.height =fi.top+ fi.height+10;
});
這樣才可以正確設(shè)置父容器的高度。