Android开发 获取View的尺寸的2个方法

前言

  总所周知,在activity启动的onCreate或者其他生命周期里去获取View的尺寸是错误的,因为很有可能View并没有初始化测量绘制完成.你这个时候获取的宽或的高不出意外就是0.所以,我们需要等待View的绘制完成后再来测量

第一种方法,将测量添加到View列队里

mTextView.post(new Runnable() {
            @Override
            public void run() {
                int w = mTextView.getWidth();
                int h = mTextView.getHeight();
                
            }
        });

这个方式在TextView初始化全部完成后会执行这个消息列队里的逻辑

第二种方法,监听View的测绘完成

mHeaderView.getViewTreeObserver().addOnGlobalLayoutListener(
    new OnGlobalLayoutListener() {
        @Override
        public void onGlobalLayout() {                                                        
            mHeaderViewHeight = mHeaderView.getHeight();
            mHeaderView.getViewTreeObserver()
                    .removeGlobalOnLayoutListener(this);
        }
});

但是需要注意的是OnGlobalLayoutListener可能会被多次触发,因此在得到了高度之后,要将OnGlobalLayoutListener注销掉。另外mHeaderViewHeight和mHeaderView都需要写在当前java文件类(比如Activity)的成员变量中。

原文地址:https://www.cnblogs.com/guanxinjing/p/11060490.html