Android -- onWindowFocusChanged

來源:互聯網
上載者:User

標籤:android   style   blog   ar   color   sp   strong   檔案   on   

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上。

我是天王蓋地虎的分割線                                                             

Android -- onWindowFocusChanged

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.