在Android中很多时候都需要获取到控件的大小,这样对于布局的计算有许多的帮助,比如一个GridView布置成多少行多少列是需要提前知道自己允许的最大的高度和宽度才能计算,这样就需要得到控件的大小。控件的大小是在View的measure的过程计算出来的。所有我们如果通过直接在onCreate()、onResume()等等方法中直接去取控件的大小是取不到的。而这里面的原因是View的measure过程和Activity的生命周期是不同步的,也就是说无法保证Activity中的onCreate()等等执行的时候View的measure()已经执行了,如果此时还没有执行肯定是得不到值的。
那么到底有没有得到控件大小的方法,答案肯定是有的。实现的方法分为两大类:
1.View在执行measure()方法之后
这是很好理解的部分,等到View已经measure()了,我们当然能很方便的得到View的大小。
(1)Activity中的View.Callback中的onWindowFocusChanged(),在Activity中实现这个方法就可以获取到空间的大小了。(PS:该方法会在Activity每次执行onResume()或者onPause()都执行)
public void onWindowFocusChanged(boolean hasFocus){
if(hasFocus){
int height = view.getHeight();
int width = view.getWidth();
}
}