因为视图的测量过程和activity的生命周期不同步,所以无法在生命周期的方法中获取测量值。
测量值只能在异步的测量过程完成后才能获取。有两种方法。
一、在onResume()中调用view的post方法
视图的测量是在消息队列中完成的,优先完成系统消息,系统消息执行完毕后才会执行用户消息。这样View调用post条件的消息会在视图测量完成后执行,就能获取测量的宽度和高度。
int with, height;
@Override
protected void onResume() {
super.onResume();
imgGridView.post(new Runnable() {
@Override
public void run() {
with = imgGridView.getMeasuredWidth();
height = imgGridView.getMeasuredHeight();
}
});
}
二、在onWindowFocusChanged()方法里面,获取宽高
视图获取焦点true的时候,测量过程完成,可以获取测量值。但是要通过DecorView获取到contentView,我不喜欢这个方法。