ViewStub詳解

(1)簡介

ViewStub 是一個輕量級的View,沒有尺寸,不繪製任何東西,因此繪製或者移除時更省時。(ViewStub不可見,大小爲0)

(2)優缺點
  • 優點

實現View的延遲加載,避免資源的浪費,減少渲染時間,在需要的時候才加載View

  • 缺點
  1. ViewStub所要替代的layout文件中不能有<merge>標籤
  2. 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,所以無需做多餘的渲染(主要是onMeasureonLayoutonDraw),避免了資源的浪費,所以常常運用於view的預加載,比如自定義標題欄,其實我們手機的狀態欄就是採用ViewStub來實現的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章