2010-11-09 17 views
40

Tengo un montón de control repetido en mi xml (un Button por ejemplo). ¿Hay alguna posibilidad de escribir el Button una vez en un xml y luego importarlo en todo el diseño que lo necesito?importa xml a otro xml

+0

que se enfrentaron a este problema cuando estaba va a hacer una barra superior que se parece a la barra de navegación de iOS. –

Respuesta

93

Puede utilizar

<include layout="@layout/commonlayout" android:id="@+id/id" /> 

commonlayout.xml deberían definirse en res/layout donde se puede añadir las partes repetidas.

+0

funciona. muchas gracias – Blackbelt

+0

Respuesta breve pero increíble. –

19

Como Labeeb P dijo con razón, funciona. Sólo quiero añadir que también se puede ignorar los parámetros demasiado:

<include 
     layout="@layout/commonlayout" 
     android:id="@+id/id" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" 
     android:layout_marginLeft="2sp" 
     android:layout_marginRight="2sp" 
/> 
2

Además de esas grandes respuestas, también puede evitar la duplicación de código mediante el uso de la etiqueta <merge>, así:

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

El <merge> parte se quita cuando lo incluye en otro xml. Esto podría ayudar a incluir más de un solo Button a la vez. Ver el official documentation.

0

Puede utilizar la etiqueta predeterminada include XML para incluir una disposición externa:

<include layout="@layout/somelayout" /> 

Esta disposición debe tener un exterior ViewGroup que encapsula el contenido o una etiqueta merge para evitar tener que utilizar un diseño innecesaria:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <TextView android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:text="@string/hello_world" /> 

</LinearLayout> 

<!-- OR --> 

<merge xmlns:android="http://schemas.android.com/apk/res/android"> 

    <TextView android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:text="@string/hello_world" /> 

</merge> 

Además, si usted necesita una manera mejor incluir piezas de diseño que actúa como un contenedor (una costumbre ViewGroup), se puede utilizar este custom ViewGroup. Tenga en cuenta que esto no importa un XML en otro archivo XML, infla el contenido del diseño externo y lo reemplaza en la vista. Es similar a ViewStub, como "ViewGroupStub".

Este lib actúa como si el ViewStub podría ser utilizado de la siguiente manera (! nota que este ejemplo no funciona ViewStub no es una subclase ViewGroup!):

<ViewStub layout="@layout/somecontainerlayout" 
    inflate_inside="@+id/somecontainerid"> 

    <TextView android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:text="@string/hello_world" /> 

</ViewStub>