天天看點

解決在onCreate()過程中擷取View的width和Height為0的方法

那麼在oncreate()擷取view的width和height會得到0呢,原因是android的oncreate和onmesure是不同步的,我們在oncreate裡面擷取的width和height,控件還沒有繪制完成呢。

針對上面的問題,網上提供了4種解決方案:

1,view.post()

此方法的思路是在oncreate裡面執行一個線程,知道擷取view的寬高屬性。

2,viewtreeobserver

但是注意這個方法在每次有些view的layout發生變化的時候被調用(比如某個view被設定為invisible),是以在得到你想要的寬高後,記得移除ongloblelayoutlistener。

3,onwindowfocuschanged()

當activity的目前window獲得或失去焦點時會被回調此方法。我們看一下其調用順序為activity.oncreate()→activity.onresume()→

→testimageview.onmeasure()→testimageview.onlayout()→ongloballayoutlistener()→activity.onwidnowfocuschanged()→.....→

→textimageview.ondraw()。

是以在onwindowfocuschanged擷取的也是不為0的。

4,重寫view的onlayout方法

我們知道android的view繪制流程中是onmesure->onlayout()的順序,是以在onlayout擷取的也是真實的資料。

繼續閱讀