UIComponentGlobals 获取布局管理器,使全局布局立即生效

 

UIComponentGlobals.mx_internal::layoutManager.validateNow();

 

原理如下:

 

在flex中,主要使用LayoutManager来驱动组件的度量和布局策略, LayoutManager实现一个单例,在Application类构造函数中创建: 

 

public function Application()
     {
         UIComponentGlobals.layoutManager = ILayoutManager(
             Singleton.getInstance("mx.managers::ILayoutManager"));
         UIComponentGlobals.layoutManager.usePhasedInstantiation = true;
 
         if (!FlexGlobals.topLevelApplication)
             FlexGlobals.topLevelApplication = this;
 
         super();
                     
         showInAutomationHierarchy = true;
     }
 

布局分三个阶段执行:提交、度量和布局。

那作为一个组件,是怎么样 参与到布局策略中呢?
flex中所有的组件都继承自UIComponent类,在该类上实现了一个叫IInvalidating的接口:

 

public interface IInvalidating
{

    function invalidateProperties():void;
    function invalidateSize():void;
    function invalidateDisplayList():void;

        function validateNow():void;
}
 

当组件调用invalidateProperties方法,表明该组件一个属性发生变化,需要更新.
它会在方法体写上这么一句:
   UIComponentGlobals.layoutManager.invalidateProperties(this);
来告诉布局管理器(LayoutManager),布局管理器在适当的时候回调组件上的validateProperties()验证属性,
如果有属性有变化,进而再调用commitProperties()提交变化的属性.

同理,
调用invalidateSize()告诉布局管理器组件大小发生了变化.
调用invalidateDisplayList()告诉布局管理器组件布局发生了变化.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值