ViewStub更加輕量級疾掰,它本身是一個不可見的 View除盏,資源消耗比較小,只有調(diào)用了ViewStub.inflate()的時候加載布局临扮,布局才會實例化孤个。
下面我們直接進(jìn)行源碼分析:
接下來分析setVisibility方法
通過上面的代碼分析我們可以得出 setVisibility 最后調(diào)用的還是 inflate剃允,所以這個方法才是關(guān)鍵
接下來看inflateViewNoAdd方法:
接著看replaceSelfWithView方法
最后總結(jié)一下:
ViewStub通過設(shè)置Gone以及設(shè)置寬和高都為0,以及setWillNotDraw(true)來達(dá)到自己不繪制不渲染的效果齐鲤,其實就是占一個坑位意思斥废。
ViewStub只能調(diào)用一次setVisibility方法,而setVisibility最后還是調(diào)用inflate方法佳遂,在replaceSelfWithView中indexOfChild代碼中营袜,如果ViewStub被移除了以后,index則是-1丑罪,那么addView的時候會拋出異常的。