Embora o Android ofereça uma variedade de widgets para fornecer elementos pequenos, reutilizáveis e interativos,
também pode ser necessário reutilizar componentes maiores que exigem um layout especial. Para reutilizar com eficiência
layouts completos, use as tags <include>
e <merge>
para incorporar
um layout dentro de outro.
Isso permite que você crie layouts complexos, como um painel de botões "sim" ou "não" ou um painel de progresso personalizado
barra com texto de descrição. E isso significa que é possível extrair todos os elementos do aplicativo que
são comuns em vários layouts, gerencie-os separadamente e inclua-os em cada layout.
é possível criar componentes de IU individuais gravando
View
, faça isso mais facilmente
reutilizar um arquivo de layout.
Criar um layout reutilizável
Comece criando um novo arquivo XML e definindo o layout que você quer reutilizar. Para
exemplo, aqui está um layout que define uma barra de título para incluir 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
ao qual você planeja adicionar esse layout.
Usar a tag <include>
Dentro do layout em que você quer adicionar o componente reutilizável, adicione o
<include>
. Por exemplo, aqui está um layout que inclui a barra de título de
no exemplo anterior:
<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>
Também é possível substituir todos os parâmetros de layout, qualquer android:layout_*
atributos da visualização raiz do layout incluído, especificando-os no elemento
<include>
. Isso é mostrado neste 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 os atributos de layout usando a tag <include>
,
também vai substituir android:layout_height
e android:layout_width
para tornar
outros atributos de layout entram em vigor.
Usar a tag <merge>
A tag <merge>
ajuda a eliminar grupos de visualizações redundantes da sua hierarquia
ao incluir um layout dentro de outro. Um caso de uso de <merge>
é quando você
implementar uma visualização personalizada estendendo uma ViewGroup
.
Por exemplo, se o layout principal for um vertical
LinearLayout
em que duas
visualizações consecutivas podem ser reutilizadas em vários layouts. Depois, no layout reutilizável,
duas visualizações precisam da própria visualização raiz. No entanto, usar outro LinearLayout
como raiz
do layout reutilizável resulta em uma LinearLayout
vertical dentro de uma
LinearLayout
: O LinearLayout
aninhado não serve a propósito real e fica lento
o desempenho da interface.
Em vez disso, você pode estender um LinearLayout
para criar uma visualização personalizada e usar um XML de layout.
para descrever as visualizações filhas. A tag superior no XML é <merge>
, em vez de
LinearLayout
, conforme mostrado no exemplo a seguir:
<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>
Quando você inclui esse layout em outro, usando o <include>
tag: o sistema ignora o elemento <merge>
e coloca os dois botões
diretamente no layout, no lugar da tag <include>
.
Para mais informações sobre <include>
, consulte
Recurso de layout.