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