<include>
をいつ使用するか、<merge>
をいつ使用するかを正しく理解しているかどうかを教えてくれる人が必要です。
そこで、他のXMLレイアウトに含めたいヘッダーレイアウトを作成します。
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent">
<TextView
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="Header text" />
</LinearLayout>
そして、私はそれをこのように他のXMLに含めます(これはかなり基本的です):
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent">
<include
Android:id="@+id/header"
layout="@layout/top"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content" />
</LinearLayout>
これは問題なく機能します。しかし、コードを最適化するために、インクルードされるレイアウトで<merge>
を使用する必要があります。したがって、top layout
にはタグ<LinearLayout>
を含めないでください。ただし、次のようにする必要があります。
<merge xmlns:Android="http://schemas.Android.com/apk/res/Android">
<TextView
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="Header text" />
</merge>
私はこれを正しく理解しましたか?
はい、あなたはそれを正しく理解しました。 merge
は、ビューツリーのレベル数を減らすための擬似親要素として使用されます。これをチェックするだけです リンク 、merge
の非常に良い説明を提供します。
ヘッダーファイル:
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent">
<include
Android:id="@+id/header"
layout="@layout/top"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content" />
</LinearLayout>
<LinearLayout>
は、あなたが言及した他のファイルにファイルが含まれている場合、違いはありません。したがって、代わりにmerge
を使用することをお勧めします。
XMLでは単一の親要素を使用する必要があり、残りのXML要素をその要素に含める必要があるため、merge
を単一の親要素として使用すると、不要な親レイアウトの追加を回避できます。
コンテンツが含まれているファイルでレイアウトが定義されているのとは異なるレイアウトを適用する場合は、「マージ」を避けてください。
私の理解から、それはマージ要素をビュー階層の上位要素として設定します。インクルードは、ビューグループ全体をそこに配置するだけです。したがって、例を使用すると、ビュー階層は次のようになります。
マージあり:
LinearLayout (root)
|
TextView
含む:
LinearLayout (root)
|
LinearLayout
|
TextView
そのため、ビュー階層に不要な追加のLinearLayoutがあります。ただし、その中間ビューが必要になる場合があります。あなたの場合、両方のLinearLayoutsは同じレイアウトパラメータを持ち、他の違いはないので、そうはしません。