Reutilizar layouts com

Embora o Android ofereça uma variedade de widgets para fornecer elementos interativos pequenos e reutilizáveis, talvez também seja necessário reutilizar componentes maiores que exijam um layout especial. Para reutilizar layouts completos com eficiência, você pode usar as tags <include/> e <merge/> para incorporar outro layout ao layout atual.

A reutilização de layouts é particularmente eficiente, porque permite criar layouts complexos reutilizáveis. Por exemplo, um painel de botões sim/não ou uma barra de progresso personalizada com texto de descrição. Isso também significa que qualquer elemento do seu aplicativo que seja comum em vários layouts pode ser extraído, gerenciado separadamente e depois incluído em cada layout. Embora seja possível criar componentes de IU individuais gravando uma View personalizada, você pode fazer isso com ainda mais facilidade reutilizando um arquivo de layout.

Criar um layout reutilizável

Se você já conhece o layout que quer reutilizar, crie um novo arquivo XML e defina o layout. Por exemplo, veja um layout que define uma barra de título a ser incluída em cada atividade (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>
    

A View raiz precisa ser exatamente como você quer que ela apareça em cada layout ao qual você adicionar esse layout.

Observação: o atributo tools:showIn do XML acima é um atributo especial que é removido durante a compilação e utilizado apenas no momento do design no Android Studio. Ele especifica um layout que inclui este arquivo, para que você possa visualizar (e editar) o arquivo como aparece quando incorporado a um layout pai.

Usar a tag <include>

Dentro do layout ao qual você quer adicionar o componente reutilizável, adicione a tag <include/>. Por exemplo, veja um layout que inclui a barra de título acima:

Veja o arquivo de layout:

    <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>
    

Você também pode substituir todos os parâmetros de layout (qualquer atributo android:layout_*) da visualização raiz do layout incluído especificando-os na tag <include/>. Por exemplo:

    <include android:id="@+id/news_title"
             android:layout_width="match_parent"
             android:layout_height="match_parent"
             layout="@layout/title"/>
    

No entanto, se você quiser modificar atributos de layout usando a tag <include>, modifique android:layout_height e android:layout_width para que outros atributos de layout entrem em vigor.

Usar a tag <merge>

A tag <merge /> ajuda a eliminar grupos de visualizações redundantes da sua hierarquia de visualização ao incluir um layout dentro de outro. Por exemplo, se seu layout principal for um LinearLayout vertical em que duas visualizações consecutivas podem ser reutilizadas em vários layouts, o layout reutilizável em que as visualizações serão colocadas exigirá a própria visualização raiz. No entanto, usar outro LinearLayout como a raiz do layout reutilizável resultaria em um LinearLayout vertical dentro de um LinearLayout vertical. O LinearLayout aninhado não serve para nenhuma finalidade real além de tornar o desempenho da IU lento.

Para evitar a inclusão de um grupo de visualizações redundante, você pode usar o elemento <merge> como a visualização raiz do layout reutilizável. Por exemplo:

    <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>
    

Agora, quando você incluir esse layout em outro (usando a tag <include/>), o sistema ignorará o elemento <merge> e colocará os dois botões diretamente no layout, no lugar da tag <include/>.

Para mais informações relacionadas a este tópico, consulte Recursos de layout.