1. 程式人生 > >Android View的onFinishInflate和onSizeChanged生命週期詳解

Android View的onFinishInflate和onSizeChanged生命週期詳解

1、onFinishInflate

從字面上來看這個方法的作用就是在完成View的佈局例項化後的回撥,關於佈局例項化的內容(LayoutInflater)的學習網址:LayoutInflater原理,通過對這篇部落格的

學習可以得知:這個回撥方法是在整個佈局檔案都例項化結束後每個View才進行回撥,或者說是在控制元件及其子控制元件都例項化結束後每個View才進行的回撥。

ps:這個回撥是發生在檢視例項化的過程中,一般在activity的oncreate方法中,並且只有在佈局檔案中例項化才有會這個回撥。

 

2、onSizeChange

  根據size和change以及這個方法的引數名稱推斷這個方法是在檢視的大小發生改變後的回撥,而檢視的大小改變時機肯定包括layout方法,所以這個回撥方法肯定是在layout方法之中呼叫,除了網上的資料可以證明,我自己查閱了layout原始碼(sdk20)也確實是這樣的,原圖如下:

 

其中setOpticalFrame方法也是呼叫setFrame方法,setFrame方法核心程式碼如下(sdk20):

從上面兩張圖可以看出兩點:

1)layout方法直接把四個引數賦值給對應的控制元件座標變數(mLeft,mTop,mRight,mBottom),也就是確定了控制元件的區域;

2)如果舊的寬度和高度任意一個發生了改變都會呼叫sizeChange方法,而sizeChange方法裡面就是onSizeChange方法。

ps:layout中發生的onSizeChange回撥是屬於繪製過程中的。