タグの主な目的include
(私が見ているように)は、開発者が再利用可能なxmlコンポーネントを作成して、同じアクティビティで、またはアプリ内の多くのアクティビティで複数回使用できるようにすることです。その再利用可能なコンポーネントが本当に有用であるためには、それは自己完結型であり、可能な限り最小限の外部接続を備えている必要があります。私の見解では、merge
含まれている各レイアウトでタグを使用すると、include
タグ全体の有用性が低下します。これが起こると思う理由の例を次に示します。
ActionBar
再利用可能なxmlコンポーネントを実装して、各アクティビティに埋め込むことを検討してください。とが含まれ、水平に配置されますTextView
。Button
これを行うためのレイアウトは次のようになります。
R.layout.actionbar
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<TextView
android:id="@+id/actionbar_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<Button
android:id="@+id/actionbar_action"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
ここで、アプリに2つのアクティビティがあるとします。1つはルートビューがLinearLayout
(垂直方向)で、もう1つはルートビューがRelativeLayout
です。上記のレイアウトは簡単に含めることができます(必要な場所に配置するだけです)。もちろん、そこからの現在の要素を考慮してLinearLayout
、同じことが可能です(たとえば、を設定する必要があることに注意してください(たとえば、複製)含まれているレイアウトのルートから)他の属性が考慮されるようにするためのタグ)。RelativeLayout
RelativeLayout
layout_width/height
include
layout_*
今、あなたの提案を考慮に入れてください。レイアウトは次のようになります。
<merge xmlns:android="http://schemas.android.com/apk/res/android" >
<TextView
android:id="@+id/actionbar_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<Button
android:id="@+id/actionbar_action"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</merge>
私たちのレイアウトを見るとActionBar
、それほど多くはわかりません。どこかに含まれるべきとがありますTextView
。Button
ここで、ルートが垂直方向であるアクティビティについて考えてみLinearLayout
ます。レイアウトR.layout.actionbar
を単純に含めることはできません。これにより、レイアウトが破損します。レイアウトを希望どおりに表示するには、レイアウトに(水平方向に)ActionBar
余分に追加する必要があります。LinearLayout
ご覧のとおり、上記の状況(タグなしのレイアウト)ですが、親ルートが垂直方向の場合は常に、merge
含まれているレイアウトを水平方向のあるレイアウトでラップすることを忘れないでください。LinearLayout
LinearLayout
ルートがである場合、状況はさらに悪化します。でタグを使用するRelativeLayout
ことはできません( RelativeLayoutをマージおよびインクルードで機能させる方法を読むための良い質問ですか? )。繰り返しになりますが、オプションは、タグのない状況にあなたを置くaに埋め込むことです(しかし、今では解決するよりも多くの問題を追加しています)。また、このリンクhttp://code.google.com/p/android/issues/detail?id=2863の最後の部分を読むと、タグの他のバグが明らかになる可能性があります。include
merge
RelativeLayout
include
LinearLayout
merge
include
上記の例からわかるように、merge
デフォルトでタグを使用すると、特定の状況で問題が発生する可能性があります。また、現在のシステムは、レイアウトを操作するためのより一貫した方法を表しています(include
ルートを使用して通常のレイアウトを作成するのと同じように、タグのレイアウトを作成しますView
)。また、merge
タグは最適化であり、パフォーマンスの問題が発生し始めるまで(または、複雑さを犠牲にして、パフォーマンスの最後の低下をすべて絞りたい場合)、最適化を試みる必要はないと思います。ほとんどのアプリは現在のシステムで問題なく動作します。適切な量のビューを備えた3〜4レベルの深さのレイアウトは、merge
最適化なしでまったく問題なく動作する可能性があります。
merge
タグのもう1つの問題は、膨らんmerge
だときに親にアタッチするために、ルートが根元にある膨らんだレイアウトが必要になることです。レイアウトを膨らませる場合はR.layout.actionbar
、親にアタッチする必要があります。
View actionBar = getLayoutInflater().inflate(R.layout.actionbar, root, true);
これが本当の制限であるかどうかはわかりません。まれな状況では、取引を妨げる可能性があります。
include
-merge
ペアの使用についての私の意見です。