码迷,mamicode.com
首页 > 移动开发 > 详细

android activity中监听View测量完成的4种方式

时间:2016-10-28 15:17:02      阅读:348      评论:0      收藏:0      [点我收藏+]

标签:控件   div   rspec   most   处理   调用   idt   runnable   生命周期   

在开发中经常碰到需要在activity初始化完成后获得控件大小的情况。

但是这个操作我们不能在oncreate、onresume等生命周期方法中调用,因为我们不知道何时view才能初始化完成

为此,特总结一下四种实现方式

 

1、Activity/View#onWindowFocusChanged

    此方法是监听焦点改点,但是在很多情况下可能会调用多次,需要进行适当处理
2、view.post(runnable)
    此方法只调用一次,其原理是将自定义的runnable放入到消息队列的尾部,当looper调用到它时,view已经初始化完成了
3、ViewTreeObserver
    此方法是监听view树的变化,通过调用其OnGlobalLayoutListener这个接口,就可以在view树发生变化时调用,不过可能也会被调用多次
4、view.measure(int widthMeasureSpec,int heightMeasureSpec)
    此方法是手动对view进行测量来得到宽高,比较复杂,分多种情况
 
    1.match_parent
        放弃测量,因为这个是需要知道父容器的parentSize的,我们不能得到这个值,所以无法测量
       
    2.具体数值(dp/px)
        指定数值100
        int widthMeasureSpec = MeasureSpec.makeMeasureSpec(100, MeasureSpec.EXACTLY);
        int heightMeasuerSpec = MeasureSpec.makeMeasureSpec(100,MeasureSpec.EXACTLY);
        view.measure(widthMeasureSpec, heightMeasureSpec);
    
     3.wrap_content
        如下measure;
        int widthMeasureSpec = MeasureSpec.makeMeasureSpec((1<<30)-1,MeasureSpec.AT_MOST);
        int heightMeasureSpec = MeasureSpec.makeMeasureSpec((1<<30)-1,MeasureSpec.AT_MOST);
        view.measure(widthMeasureSpec,heightMeasureSpec);

android activity中监听View测量完成的4种方式

标签:控件   div   rspec   most   处理   调用   idt   runnable   生命周期   

原文地址:http://www.cnblogs.com/wikiki/p/6007841.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!