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