有时想在Activity加载完成之后进行一些操作,比如在根据界面上的控件大小设置边距——在Activity还没加载完毕时,通过getHeight、getWidth返回都会是为0,因为此时控件还没画出来呢,所以无论是在onResume还是onCreate都是无法获取到控件大小的。
此时我们就可以重载另一个回调方法onWindowFocusChanged(boolean hasFocus),这个方法是在Activity得到或者失去焦点的时候就会回调,其中hasFocus表示Activity是获取到焦点还是失去焦点。
即当Activity加载完毕显示时,会调用onWindowFocusChanged,并且hasFocus为true;
当Activity被失去焦点,会调用onWindowFocusChanged,并且hasFocus为false。
这样就可以进行各自相应的操作了。
有时我们在onCreate或者onStart中获取控件的高度时获取的都是0,因为控件还没有初始化完毕。
android给开发者提供了一个方法,可以解决这个问题,这个方法就是onWindowFocusChanged()
相关执行打印:
1: entry: onStart---->onResume---->onAttachedToWindow----------->onWindowVisibilityChanged--visibility=0---------->onWindowFocusChanged(true)------->
2. exit: onPause---->onStop---->onWindowFocusChanged(false) ---------------------- (lockscreen)
3. exit : onPause----->onWindowFocusChanged(false)-------->onWindowVisibilityChanged--visibility=8------------>onStop(to another activity)