Android -- onWindowFocusChanged
Android中獲取手機(jī)屏幕的高度和寬度,我們知道在onCreate方法中獲取到的值都是為0的,有人說可以在onClick方法中獲取值,這個(gè)也是個(gè)方法 ,但在onWindowFocusChanged方法中可以直接獲取到,而且有的時(shí)候場景的需要,就不得不在Activity渲染完成后立馬獲取值,這時(shí)候onWindowFocusChanged()方法就用到實(shí)處了,類似的有PopupWindow的顯示,如果在onCreate方法中執(zhí)行的話,會報(bào)沒有token的異常,就是因?yàn)锳ctivity沒有渲染成功.
onWindowFocusChanged():當(dāng)Activity的當(dāng)前Window獲得或失去焦點(diǎn)時(shí)會被回調(diào)此方法。當(dāng)回調(diào)了這個(gè)方法時(shí)表示Activity是完全對用戶可見的(只是可見,還一片黑呼呼的,有待draw..)。當(dāng)對話框彈起/消失及Activity新創(chuàng)建及回退等都會調(diào)用此方法。
相比之下,onResume()方法更多的是指Activity進(jìn)入了可見的狀態(tài),但只是狀態(tài),并不是真正的界面構(gòu)建完成了。
demo???????????????????????????????????????????????????????????????????????????????????
一個(gè)Activity只顯示一個(gè)TestImageView,并重寫TestImageView下的onMeasure()、onLayout()、onDraw()方法,并對其設(shè)置onGlobalLayout()監(jiān)聽,觀察這幾個(gè)方法與Activity的onResume()、onWindowFocusChanged()的調(diào)用順序,如下:
?
ClipDrawableActivity onCreate() time=1376920332125 ClipDrawableActivity onResume() TestImageView.width=0 time=1376920332149 MainActivity onWindowFocusChanged hasFocus=false ClipDrawableActivity TestImageView onMeasure() ClipDrawableActivity TestImageView onMeasure() ClipDrawableActivity TestImageView onMeasure() ClipDrawableActivity TestImageView onMeasure() ClipDrawableActivity TestImageView onLayout() ClipDrawableActivity onGlobalLayout() TestImageView.width=736 time=1376920332185 ClipDrawableActivity onWindowFocusChanged() hasFocus=true TestImageView.width=736 time=1376920332187 ClipDrawableActivity TestImageView onMeasure() ClipDrawableActivity TestImageView onMeasure() ClipDrawableActivity TestImageView onLayout() ClipDrawableActivity onGlobalLayout() TestImageView.width=736 time=1376920332194 ClipDrawableActivity TestImageView onDraw()?
Activity.oncreate()→Activity.onResume()→TestImageView.onMeasure()→TestImageView.onLayout()→onGlobalLayoutListener()→Activity.onWidnowFocusChanged()→.....→TextImageView.onDraw()
總結(jié)???????????????????????????????????????????????????????????????????????????????????
至此,如果需要獲取某個(gè)View的寬高,可以在onWindowFocusChanged()處直接獲取即可,這比對某個(gè)view設(shè)置onGlobalLayoutListener的方式來獲取方便了許此。又比如,對于需要讀取本地文件記錄來判斷是否是第一次打開界面去提示文本圖片的,也可以在此方法中去讀取然后再顯示在ui上。
我是天王蓋地虎的分割線 ? ? ? ? ? ??
本文轉(zhuǎn)自我愛物聯(lián)網(wǎng)博客園博客,原文鏈接:http://www.cnblogs.com/yydcdut/p/4124966.html,如需轉(zhuǎn)載請自行聯(lián)系原作者
總結(jié)
以上是生活随笔為你收集整理的Android -- onWindowFocusChanged的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 南征北战的意思
- 下一篇: android sina oauth2.