(1)簡介
ViewStub 是一個輕量級的View,沒有尺寸,不繪製任何東西,因此繪製或者移除時更省時。(ViewStub不可見,大小爲0)
(2)優缺點
- 優點
實現View的延遲加載,避免資源的浪費,減少渲染時間,在需要的時候才加載View
- 缺點
- ViewStub所要替代的layout文件中不能有<merge>標籤
- ViewStub在加載完後會被移除,或者說是被加載進來的layout替換掉了。
(3)使用
第一步,在佈局中添加ViewStub
<ViewStub
android:id="@+id/status_bar"
android:inflatedId="@+id/inflate_status_bar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout="@layout/statusbar"
android:background="@android:color/black" />
ViewStub status_view = findViewById(R.id.status_bar);
status_view.setVisibility(View.VISIBLE);
//或者
//status_view.inflate();
我們必須瞭解以下兩點
- ViewStub即使在xml中聲明瞭,也不會顯示,因爲它的大小爲0,只有調用
setVisibility(View.VISIBLE)
或者inflate()
之後纔會將ViewStub替換爲你預先加載的statusbar
佈局,也就是android:layout="@layout/statusbar"
- id和inflatedId的區別?
id是ViewStub自身的id, 而inflatedId是layout的id,當執行setVisibility(View.VISIBLE)
或者inflate()
之後(也就是說ViewStub被layout替代),原來的ViewStub就不能通過id獲取了
(4)作用
由於ViewStub本身大小爲0,所以無需做多餘的渲染(主要是onMeasure
、onLayout
、onDraw
),避免了資源的浪費,所以常常運用於view的預加載,比如自定義標題欄
,其實我們手機的狀態欄就是採用ViewStub來實現的。