先來一段onWindowFocusChanged的源碼介紹
public void onWindowFocusChanged(boolean ?hasFocus) {
}
問題?
1.PopWindow無法在OnCreate、onStart、onResume中展示?
2.無法在OnCreate、onStart、onResume中獲取View寬度和高度
分析:
Activity生命周期中,onStart, onResume, onCreate都不是真正visible的時間點(diǎn),真正的visible時間點(diǎn)是onWindowFocusChanged()函數(shù)被執(zhí)行時。
譯注:從onWindowFocusChanged被執(zhí)行起,用戶可以與應(yīng)用進(jìn)行交互了,而這之前,對用戶的操作需要做一點(diǎn)限制。
這個onWindowFocusChanged指的是這個Activity得到或者失去焦點(diǎn)的時候 就會call。。
也就是說 如果你想要做一個Activity一加載完畢,就觸發(fā)什么的話 完全可以用這個!??!
使用一個view的getWidth() getHeight() 方法來獲取該view的寬和高,返回的值卻為0。
如果這個view的長寬很確定不為0的話,那很可能是你過早的調(diào)用這些方法,也就是說在這個view被加入到rootview之前你就調(diào)用了這些方法,返回的值自然為0.
解決該問題的方法有很多,主要就是延后調(diào)用這些方法??梢栽囍趏nWindowFocusChanged()里面調(diào)用這些方法,驗證時可以獲取到View的寬高的。
相關(guān)執(zhí)行打印:
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)