今天寫一下 ViewStub ,內容很簡單!java
ViewStub 是一個不可見的,沒有尺寸,不會繪製任何東西的佈局。主要用於實現 View 的延遲加載,能夠避免浪費資源,減小布局的繪畫,只有須要的時候纔會加載。android
在 ViewStub 加載完成後就會被移除,它所佔用的空間就會被新的佈局替換。仍是來講一下具體的用法,比較清晰。
佈局
用法code
// 在佈局文件中,你就當作普通 View 使用便可 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@color/colorAccent" android:orientation="vertical"> <TextView android:id="@+id/tv" android:textColor="@android:color/white" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="內容區域"/> <ViewStub android:id="@+id/vs" android:layout_width="match_parent" android:layout_height="300dp" // 當 ViewStub 加載後,就會被下面這個佈局佔用 android:layout="@layout/activity_main"/> </LinearLayout>
加載 ViewStub 的時候能夠使用方法:xml
findViewById(R.id.vs).setVisibility(View.VISIBLE); 或者 View view = (findViewById(R.id.vs).inflate());
注意,若是你不調用上面的方法的話,ViewStub 是不會被加載的,包括 layout 屬性中的佈局,這也就是上面所說的減小資料,只有你須要了,調用上面的方法纔會加載佈局。一旦調用上面的方法後 ViewStub 就會變成 null 了。blog
應用場景utf-8
頁面自己有一個佈局,當因爲某些錯誤,這個佈局不加載的時候,這個時候你就能夠讓 ViewStub 加載你預留的空白布局了。若是提早寫兩套佈局,根據狀態使用 VISIBILBE 來調整的話,這種是你在進入這個頁面,佈局上面全部的控件都會加載,是會浪費資源的(有了這個空白布局一直就處於不顯示狀態的話)資源