有時版面配置需要用到很少使用的複雜檢視畫面。無論 像是項目詳細資料、進度指標或復原訊息 而且只在使用者執行時載入檢視畫面,藉此加快轉譯速度 。
當應用程式有複雜的檢視畫面時,您可以延遲載入資源
定義日後需要的
ViewStub
:
複雜且極少使用的檢視
定義 ViewStub
ViewStub
是輕量級檢視畫面,不含維度
繪製任何內容或參與版面配置因此,這個過程所需資源不多
加載並離開檢視區塊階層每個 ViewStub
都包含
android:layout
屬性,指定要加載的版面配置。
假設您想在網站的使用者歷程中載入一個版面配置 應用程式:
<?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <ImageView android:src="@drawable/logo" android:layout_width="match_parent" android:layout_height="match_parent"/> </FrameLayout>
您可以使用下列 ViewStub
延後載入。要求
顯示或載入任何內容,您必須讓它顯示參考的版面配置:
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/root" android:layout_width="match_parent" android:layout_height="match_parent"> <ViewStub android:id="@+id/stub_import" android:inflatedId="@+id/panel_import" android:layout="@layout/heavy_layout_we_want_to_postpone" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_gravity="bottom" /> </FrameLayout>
載入 ViewStub 版面配置
上一節的程式碼片段會產生類似圖的內容 1:
![空白畫面的圖片](https://developer.android.com/static/images/ui/viewstub_1.png?hl=zh-tw)
ViewStub
為
隱藏大量版面配置如要載入 ViewStub
指定的版面配置,
您可以呼叫
setVisibility(View.VISIBLE)
或打電話。
inflate()
。
下列程式碼片段會模擬延遲載入。畫面載入為
通常位於 Activity
和 onCreate()
,然後就會顯示
heavy_layout_we_want_to_postpone
版面配置:
Kotlin
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_old_xml) Handler(Looper.getMainLooper()) .postDelayed({ findViewById<View>(R.id.stub_import).visibility = View.VISIBLE // Or val importPanel: View = findViewById<ViewStub>(R.id.stub_import).inflate() }, 2000) }
Java
@Override void onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_old_xml); Handler(Looper.getMainLooper()) .postDelayed({ findViewById<View>(R.id.stub_import).visibility = View.VISIBLE // Or val importPanel: View = findViewById<ViewStub>(R.id.stub_import).inflate() }, 2000); }
![](https://developer.android.com/static/images/ui/viewstub_2.png?hl=zh-tw)
顯示或加載後,ViewStub
元素就不再有部分
檢視區塊階層這會替換為加載的版面配置,而
該版面配置的根層級由 android:inflatedId
指定
ViewStub
屬性。指定的 ID android:id
「ViewStub
」的效期將至 ViewStub
為止
版面配置是否顯示或加載。
如要進一步瞭解這個主題,請參閱網誌文章 最佳化 含有虛設常式