2011-07-12 8 views
9

最近マージについて学習しています。最近質問をしています。複数のレイアウトに追加したいヘッダコンポーネントを定義するレイアウトがあるとします。しかし、各インクルードの使用法ごとに、各ヘッダのタイトルまたはアイコンを変更したい。たとえば、私は次のようなレイアウトを持っていると言う:含まれているレイアウトのネストされた属性を変更する

<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がそれを行うことができるという証拠は見つかりません。

+0

これらのビューの内容を変更したい場合は、それらのビューで構成されたカスタムビューを使用する必要があります。インクルードは、他の場所でビュー/ビューグループをコピー/ペーストするときに便利な機能です。 – Gregory

+0

ただし、同じコードをコピーして貼り付けできるのであれば、インクルードは限られています。カスタムビューでは、オーサリング、カスタムスタイルオプションの追加、ビューのサブクラス化のためのコード作成などのオーバヘッドが大幅に増えます。ネストされた要素のいくつかの属性を微調整している場合は、象全体を食べることなく行うことができます。 – chubbsondubs

+0

私は再びinclude(http://android-developers.blogspot.com/2009/02/android-layout-tricks-2-reusing-layouts.html)上のクイック "チュートリアル"を読んで、それはちょうど特に2つの異なるレイアウト(ポートレートとランドスケープ)に共通の「サブレイアウト」を含めると、単純なコピー/貼り付けになります。結局あなたのアイデアは結構涼しいものですが、/ – Gregory

答えて

5

答えはnopeです。残念ながら、Androidはそれほど強力ではありません。 ViewGroupの独自の拡張を作成し、より多くのコードを書く必要があります。

+0

あなたはこれを行う方法の例を教えていただけますか? – jpotts18

+0

いいえ、独自のカスタムコンポーネントを作成すると、コメントに許可されるよりも多くの労力とスペースが必要になるためです。私がレイアウトファイルだけを使って説明することはできません。このように再利用およびパラメータ化できるものを構築する場合は、ViewGroupを拡張して独自の顧客コンポーネントを作成する必要があります。 – chubbsondubs

+0

私は試してみるでしょう。ありがとう! – jpotts18

関連する問題