雖然 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_height
和 android: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>
,請參閱
版面配置資源。