透過 <includegt; 重複使用版面配置

雖然 Android 提供多種小工具 讓您享有可重複使用的小型互動元素 您可能也需要重複使用需要特殊版面配置的大型元件。有效率地重複使用 完整版面配置,請使用 <include><merge> 標記嵌入 呈現不同的版面配置

這可讓您建立複雜的版面配置,例如「是」或「否」按鈕面板,或自訂進度 含有說明文字的列換句話說,您可以擷取應用程式中的任何元素 常見於多個版面配置,請分別管理,並加入每個版面配置中。雖然 您可以建立個別的 UI 元件 View, 重複使用版面配置檔案

建立可重複使用的版面配置

請先建立新的 XML 檔案,並定義要重複使用的版面配置。適用對象 舉例來說,以下版面配置可定義要加入各項活動的標題列 (titlebar.xml):

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@color/titlebar_bg"
    tools:showIn="@layout/activity_main" >

    <ImageView android:layout_width="wrap_content"
               android:layout_height="wrap_content"
               android:src="@drawable/gafricalogo" />
</FrameLayout>

根層級 View 必須與您想在每個路徑中的顯示方式完全相同 您打算新增此版面配置的版面配置

使用 <include>標記

在您要新增可重複使用的元件的版面配置中加入 <include> 標記。舉例來說,以下版面配置可加入標題列的 上述範例:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/app_bg"
    android:gravity="center_horizontal">

    <include layout="@layout/titlebar"/>

    <TextView android:layout_width="match_parent"
              android:layout_height="wrap_content"
              android:text="@string/hello"
              android:padding="10dp" />
    ...
</LinearLayout>

您也可以覆寫所有版面配置參數,任何 android:layout_* 屬性,方法是在 <include> 標記。例如:

<include android:id="@+id/news_title"
         android:layout_width="match_parent"
         android:layout_height="match_parent"
         layout="@layout/title"/>

不過,如要使用 <include> 標記覆寫版面配置屬性, 同時覆寫 android:layout_heightandroid:layout_width,即可 其他版面配置屬性也會生效。

使用 <merge>標記

<merge> 標記可協助排除檢視區塊階層中多餘的檢視區塊群組 在版面配置中加入版面配置時,可看出<merge> 的其中一種用途是 擴充 ViewGroup 以實作自訂檢視區塊。

舉例來說,如果主要版面配置為直向 LinearLayout,其中兩個 就能在多個版面配置中重複使用,然後將可重複使用的版面配置 (也就是 這兩個檢視畫面都需要有自己的根層級檢視區塊。不過,使用另一個 LinearLayout 做為根層級 對於可重複使用的版面配置會產生直向的直向 LinearLayout LinearLayout。巢狀 LinearLayout 沒有實際用途且速度變慢 並降低 UI 效能

您可以改為擴充 LinearLayout 來建立自訂檢視區塊,並使用版面配置 XML 來描述子項檢視畫面XML 中的最佳標記是 <merge>,而非 LinearLayout,如以下範例所示:

<merge xmlns:android="http://schemas.android.com/apk/res/android">

    <Button
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/add"/>

    <Button
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/delete"/>

</merge>

使用這個版面配置納入其他版面配置時 (使用 <include>) 標記—系統會忽略 <merge> 元素並將兩個按鈕放置 直接在版面配置中插入 <include> 標記。

如要進一步瞭解 <include>,請參閱 版面配置資源