2010-04-28 22 views
71

Tengo curiosidad por las etiquetas <merge> y <include> en Android XML-layouts. He leído dos tutoriales, pero aún no he encontrado un uso de ejemplo simple.Ejemplo simple de <merge> y <include> uso en Android XML-layouts

Estaría contento si alguien pudiera proporcionar un ejemplo o darle un puntero a uno.

+2

Por favor, eche un vistazo a la documentación icial de Android: [Reutilización de diseños con ] (http://developer.android.com/training/improving-layouts/reusing-layouts.html) – JJD

+0

http://stackoverflow.com/a/11093340/596555, puede ser de ayuda u. – boiledwater

+0

FYI, si está buscando utilizar esto con ** menus **, no tiene suerte, pero puede inflar múltiples archivos XML, como se describe aquí: http: // stackoverflow.com/questions/4337034/include-menu-in-menu-android –

Respuesta

93

some_activity.xml:

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

    // some views 

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

    // probably more views 

</LinearLayout> 

view_part.xml:

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

    // the views to be merged 

</merge> 
+0

por lo que a la fusión-cosa se hace referencia por su nombre de archivo ... ¿no hay ningún atributo de id en el archivo de fusión? – aioobe

+19

@aioobe derecha. '' básicamente significa 'tomar ese archivo y pegarlo aquí'. – yanchenko

+0

hola, en realidad estoy enfrentando un grave problema aquí. Estoy usando preferencias y especificando diseños para usar dentro de las preferencias. Dentro del diseño estoy usando la función de fusión de inclusión (de modo que tengo un marcador de posición que utilizará el interruptor o la casilla de verificación en función de la versión). El problema está en mi prioridad de preferencia en el método PostCreate cuando estoy tratando de encontrar la vista (es decir, checkbox/switch), ¡siempre obtengo la vista como nula! ¿Puedes ayudar aquí? http://stackoverflow.com/questions/15708599/findviewbyid-returns-null-for-preference-layout – Adithya

2

ID no pegar código de parámetros de diseño de lo contrario relativos hubiera funcionado. Hace un procesamiento diferente

4

tomar un ejemplo:

Tengo dos etiquetas <EditText> y <ListView > próximos más de una interfaces de usuario. Así que creé un archivo XML como se indica a continuación para incluirlo en todas las UI.

<?xml ...> 
<EditText ... /> 
<ListView ... /> 

El XML anterior no es XML válido ya que no tenía un elemento raíz. Por lo tanto, se necesita un elemento raíz solo por el bien de XML. <merge> es la solución tal como se indica a continuación:

<?xml ...> 
<merge xmlns:android="http://schemas.android.com/apk/res/android"> 
    <EditText ... /> 
    <ListView ... /> 
</merge> 
2

<merge> etiqueta se utiliza para mitigar el número de los niveles para aumentar el rendimiento de los diseños de representación. la etiqueta se usa con la etiqueta <include> perfectamente juntas.

Tomemos un ejemplo, tenemos un diseño de inicio de sesión y se utiliza para más de uno en el alcance de nuestra aplicación. Mientras usamos tag para mostrar login_layout, podemos usar y podemos escapar de un nivel.

También le aconsejo que lea los trucos sobre los diseños. http://android-developers.blogspot.com.tr/2009/03/android-layout-tricks-3-optimize-by.html

login_form.xml

<?xml version="1.0" encoding="utf-8"?> 
<!-- Login form --> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:orientation="vertical" > 
    <EditText 
     android:id="@+id/email" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:hint="Email..." 
     android:inputType="textEmailAddress" 
     android:maxLines="1" 
     android:singleLine="true" 
     android:visibility="visible" /> 

    <EditText 
     android:id="@+id/password" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:hint="Password.." 
     android:imeActionId="@+id/login" 
     android:imeOptions="actionUnspecified" 
     android:inputType="textPassword" 
     android:maxLines="1" 
     android:singleLine="true" 
     android:text="1337" 
     android:visibility="visible" /> 

    <Button 
     android:id="@+id/sign_in_button" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center" 
     android:layout_marginTop="16sp" 
     android:paddingLeft="32sp" 
     android:paddingRight="32sp" 
     android:text="Login" 
     android:visibility="visible" /> 

</LinearLayout> 

example_layout.xml (cualquier diseño queremos incluir login_form.xml)

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

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

</merge> 

podemos ver el nivel de jerarquía enter image description here

+0

¿Qué hay de las identificaciones? –

Cuestiones relacionadas