<include> でレイアウトを再利用する

Android には、小さくて再利用可能なインタラクティブな要素を提供するさまざまなウィジェットが用意されていますが、 特別なレイアウトを必要とする大きなコンポーネントの再利用が必要になる場合もあります。リソースを効率的に再利用するには <include> タグと <merge> タグを使用してすべてのレイアウトを 内部に配置できます。

これにより、[はい] または [いいえ] ボタンのパネルやカスタムの進行状況などの複雑なレイアウトを作成できます。 説明テキストが表示されます。つまり、API 呼び出しを行うアプリケーションの要素を それらのレイアウトは複数のレイアウトで共通です。それらを個別に管理し、各レイアウトに含めることができます。しばらく 個別の 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 は、それぞれのレイアウトで意図したものとまったく同じである必要があります。 追加しようとします

<ph type="x-smartling-placeholder">

<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_heightandroid:layout_width をオーバーライドして、 他のレイアウト属性が有効になります。

<merge> タグを使用する

<merge> タグを使用すると、1 つのレイアウトを別のレイアウトに含める際に、ビュー階層内の冗長なビューグループを削除できます。<merge> のユースケースの一つは、 ViewGroup を拡張してカスタムビューを実装します。

たとえば、メイン レイアウトが縦向きの LinearLayout、つまり 連続したビューを複数のレイアウトで再利用できます。その後、再利用可能なレイアウトで 2 つのビューには、それぞれ独自のルートビューが必要です。ただし、別の 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> 要素が無視され、2 つのボタンが配置されます) <include> タグの代わりに、レイアウト内で直接呼び出すことができます。

<include> の詳細については、以下をご覧ください。 レイアウト リソース