有时需要在onCreate中对View进行初始化时需要用到View的宽高,但往往通过getHight(),getWith()拿到的宽高都是0,那是因为View在这时候并没有真正绘制出来。
通过度娘查资料找到了一种可以在onCreate中获得View宽高的办法。
解决方案:
给View绑定一个监听器,当View要绘制的时候,会在绘制前调用监听器里的方法。
//获取组件的观察者
ViewTreeObserver vto = mKeyOne.getViewTreeObserver();
//给观察者加上监听器,当View要被绘制的时候就会回调里面的方法
vto.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
@Override
public boolean onPreDraw() {
// hasMeasured 为标识符,我们要获得View的长宽只需要获取一次,如果不把标识符改过来那么就会容易造成资源浪费。
if (hasMeasured == false){
//获取View的狂高
int h = mKeyOne.getHeight();
int w = mKeyOne.getWidth();
//获取完长宽后就把他设置为true那么上面的代码不会再执行。
hasMeasured = true;
}
return true;
}
});