samtiger


QQ:418148757
Name:yangchuan
数据加载中……
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;
    });
这样才可以正确设置父容器的高度。


posted on 2010-04-10 15:59 sam.chuan.yang 阅读(5847) 评论(0)  编辑  收藏 所属分类: flex基础


只有注册用户登录后才能发表评论。


网站导航: