按照要求載入檢視畫面

有時版面配置需要用到很少使用的複雜檢視畫面。無論 像是項目詳細資料、進度指標或復原訊息 而且只在使用者執行時載入檢視畫面,藉此加快轉譯速度 。

當應用程式有複雜的檢視畫面時,您可以延遲載入資源 定義日後需要的 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:

空白畫面的圖片
圖 1:螢幕初始狀態:ViewStub 為 隱藏大量版面配置

如要載入 ViewStub 指定的版面配置, 您可以呼叫 setVisibility(View.VISIBLE) 或打電話。 inflate()

下列程式碼片段會模擬延遲載入。畫面載入為 通常位於 ActivityonCreate(),然後就會顯示 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);
}
圖 2 顯示較大的版面配置。
,瞭解如何調查及移除這項存取權。

顯示或加載後,ViewStub 元素就不再有部分 檢視區塊階層這會替換為加載的版面配置,而 該版面配置的根層級由 android:inflatedId 指定 ViewStub 屬性。指定的 ID android:idViewStub」的效期將至 ViewStub為止 版面配置是否顯示或加載。

如要進一步瞭解這個主題,請參閱網誌文章 最佳化 含有虛設常式