概要:
需求:
有时候需要在OnCreate()中获取View的宽度和高度,
问题:
而调用getWidth()、getHeight()、getMeasuredWidth()、getMeasuredHeight()这几个方法获取到的值都是0。
原因:
Activity在调用onResume()后才会开始执行View的初始化,所以此时View的宽高还是0.
解决方法如下:
使用View的post方法获取View的宽高:
调用代码如下:
//获取View的宽高
lession2LifeImageView.post(newRunnable() {
@Override
public voidrun() {
intwidth =lession2LifeImageView.getWidth();
intheight =lession2LifeImageView.getHeight();
Log.d("lincoln","view--->Width:"+width+" -->Height:"+height);
}
});
其他解决方案:
view.getViewTreeObserver().addOnPreDrawListener、
或
view.getViewTreeObserver().addOnGlobalLayoutListener
或
view.addOnLayoutChangeListener
注意: 以上三种方案都存在重复调用的问题,需要及时移除监听
其他思路:
根据View创建时的生命周期可以知道,只要在onMeasure()方法之后都可以获得View的真实宽高
View创建时生命周期和Activity生命周期关系:
源码
Demo源码:GitHub:ExplainView