最近マージについて学習しています。最近質問をしています。複数のレイアウトに追加したいヘッダコンポーネントを定義するレイアウトがあるとします。しかし、各インクルードの使用法ごとに、各ヘッダのタイトルまたはアイコンを変更したい。たとえば、私は次のようなレイアウトを持っていると言う:含まれているレイアウトのネストされた属性を変更する
<LinearLayout ...>
<include android:id="@+id/searchHeader" layout="@layout/shared_header" title="Search"/>
...
</LinearLayout>
私はルート要素のいずれかのlayout_ *属性を変更することができますが、私ができる知っている:
<RelativeLayout android:layout_width="fill_parent"
android:layout_height="wrap_content"
style="@style/menu_header">
<Button android:id="@+id/backButton"
android:layout_alignParentLeft="true"
android:layout_centerVertical="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
style="@style/button"
android:text="@string/back"/>
<TextView style="@style/headerTitle"
android:layout_centerInParent="true"
android:text="${title}"
android:layout_height="wrap_content"
android:layout_width="wrap_content"/>
</RelativeLayout>
それから私は使用して他のレイアウトにすることを含むことができ、この例では "title"のようにレイアウトに代入される他の属性を定義し、Viewの独自のサブクラスを作成したり、valaues/resourcesなどにdeclare-styleable定義を追加したりする必要はありません。
このようにすると、再利用可能なビューを非常に簡単に作成できるようになりますが、merge + includeがそれを行うことができるという証拠は見つかりません。
これらのビューの内容を変更したい場合は、それらのビューで構成されたカスタムビューを使用する必要があります。インクルードは、他の場所でビュー/ビューグループをコピー/ペーストするときに便利な機能です。 – Gregory
ただし、同じコードをコピーして貼り付けできるのであれば、インクルードは限られています。カスタムビューでは、オーサリング、カスタムスタイルオプションの追加、ビューのサブクラス化のためのコード作成などのオーバヘッドが大幅に増えます。ネストされた要素のいくつかの属性を微調整している場合は、象全体を食べることなく行うことができます。 – chubbsondubs
私は再びinclude(http://android-developers.blogspot.com/2009/02/android-layout-tricks-2-reusing-layouts.html)上のクイック "チュートリアル"を読んで、それはちょうど特に2つの異なるレイアウト(ポートレートとランドスケープ)に共通の「サブレイアウト」を含めると、単純なコピー/貼り付けになります。結局あなたのアイデアは結構涼しいものですが、/ – Gregory