Import xml en otro xml
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?
- Android.widget.SeekBar no se puede convertir en android.widget.TextView
- Cómo configurar la altura y el ancho de textview texable compuesto en xml?
- Gradle falla: nodo no soportado 'item' en ids.xml
- Problemas de procesamiento @ id / visible Android Studio
- Android XmlPullParser UTF-8 problema
- ¿Cómo evitar que el formulario android saltea secciones en forma?
- Android: Archivo XML de caché de RSS Feed
- transformar xml a html usando xslt
- Notificación personalizada de Android que no muestra cambios de código
- Generar un recurso de cadena que contiene% from build.gradle con resValue
- ¿Debería estar lleno el archivo xml del contenido de la copia de seguridad completa o no incluirlo en todos?
- Análisis de un archivo XML en Java para obtener una lista de nombres
- Flechas personalizadas sin imagen: Android
Puedes usar
<include layout="@layout/commonlayout" android:id="@+id/id" />
commonlayout.xml
debe definirse en res/layout
donde se pueden agregar las partes repetidas.
Como bien dice Labeeb P , funciona. Sólo quiero agregar que también puede anular 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" />
Además de esas grandes respuestas, también puede evitar la duplicación de código mediante 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>
La parte <merge>
se despoja al incluirla en otro xml. Esto podría ayudar a incluir más de un Button
a la vez. Consulte la documentación oficial .
Puede utilizar la etiqueta XML de include
predeterminada para incluir un diseño externo:
<include layout="@layout/somelayout" />
Este diseño debe tener un ViewGroup
externo que encapsule el contenido o una etiqueta de merge
para evitar tener que utilizar un diseño innecesario:
<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 necesita una mejor forma de incluir elementos de diseño que actúan como un contenedor (un grupo de ViewGroup
personalizado), puede utilizar este grupo de vistas personalizado . Tenga en cuenta que esto no importa un XML en otro archivo XML, infla el contenido del diseño externo y lo sustituye en la vista. Es similar a ViewStub
, un "ViewGroupStub" como.
Esta lib actúa como si el ViewStub
pudiera utilizar como sigue ( tenga en cuenta 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>