¿Cómo incluir el diseño dentro del diseño?


Respuestas:


194

Editar: Como en un comentario, se solicitó correctamente aquí más información. Usa la includeetiqueta

<include
   android:layout_width="match_parent"
   android:layout_height="wrap_content"
   layout="@layout/yourlayout" />

para incluir el diseño que desea reutilizar.

Mira este enlace ...


11
solo un pequeño detalle: use android: layout_width = "match_parent" en lugar de android: layout_width = "fill_parent". fill_parent está en desuso.
Trinity

1
¿Puedo incluir un diseño y establecer algunas de sus propiedades a través del xml, por ejemplo, establecer una cadena de texto en el subdiseño directamente en la etiqueta <include>?
JohnyTex

@JohnyTex No estoy seguro de si puede hacerlo directamente en la <include />etiqueta, sin embargo, puede hacerlo usando el código Java. consulte la respuesta de Phileo99 a continuación para saber cómo obtener una referencia al diseño incluido. y luego puede modificar su contenido.
Moisés

56

Tenga en cuenta que si incluye android:id...en la <include />etiqueta, anulará cualquier ID que se haya definido dentro del diseño incluido. Por ejemplo:

<include
   android:layout_width="fill_parent"
   android:layout_height="wrap_content"
   android:id="@+id/some_id_if_needed"
   layout="@layout/yourlayout" />

yourlayout.xml:

<LinearLayout
   android:layout_width="fill_parent"
   android:layout_height="wrap_content"
   android:id="@+id/some_other_id">
   <Button
       android:layout_width="fill_parent"
       android:layout_height="wrap_content"
       android:id="@+id/button1" />
 </LinearLayout>

Luego, haría referencia a este diseño incluido en el código de la siguiente manera:

View includedLayout = findViewById(R.id.some_id_if_needed);
Button insideTheIncludedLayout = (Button)includedLayout.findViewById(R.id.button1);


6

Prueba esto

<include
            android:id="@+id/OnlineOffline"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentTop="true"
            layout="@layout/YourLayoutName" />

2

De documentos oficiales sobre la reutilización de diseños

Aunque Android ofrece una variedad de widgets para proporcionar elementos interactivos pequeños y reutilizables, es posible que también deba reutilizar componentes más grandes que requieran un diseño especial. Para reutilizar eficientemente diseños completos, puede utilizar la etiqueta para incrustar otro diseño dentro del diseño actual.

Aquí está mi archivo header.xml que puedo reutilizar usando la etiqueta de inclusión

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="#FFFFFF"
    >


    <TextView
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:gravity="center"
        android:text="@string/app_name"
        android:textColor="#000000" />

</RelativeLayout>

No, yo uso el etiqueta en XML para agregar otro diseño de otro archivo XML.

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="#f0f0f0" >


    <include
        android:id="@+id/header_VIEW"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        layout="@layout/header" />

        <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_margin="5dp"
        android:background="#ffffff"
        android:orientation="vertical"
        android:padding="5dp" >


    </LinearLayout>

¿Por qué poner TextView en un RelativeLayout y no como la vista raíz?
Florian Walther

@FlorianWalther Este es un ejemplo
IntelliJ Amiya

Gracias por la rápida respuesta. Pero, ¿tengo razón en que podría poner TextView como elemento raíz o me falta algo? Porque quiero reutilizar un ProgressBar y me pregunto si tengo que ponerlo en un diseño.
Florian Walther

@FlorianWalther Because I want to reuse a ProgressBar¿qué problema viene?
IntelliJ Amiya

No hay problema, funciona. Pero todos los ejemplos que veo en línea ponen el widget único en otro diseño y me pregunto por qué.
Florian Walther

0

Obtenga más información utilizando este enlace https://developer.android.com/training/improving-layouts/reusing-layouts.html

    <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".Game_logic">
    
          
            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="horizontal">
    
                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginLeft="5dp"
                    android:id="@+id/text1"
                    android:textStyle="bold"
                    tools:text="Player " />
    
                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:textStyle="bold"
                    android:layout_marginLeft="20dp"
    
                    android:id="@+id/text2"
                    tools:text="Player 2" />
          
            
          
        </LinearLayout>
    </androidx.constraintlayout.widget.ConstraintLayout>

Blockquote

  • El diseño anterior se puede utilizar en otra actividad utilizando

     <?xml version="1.0" encoding="utf-8"?><androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
                      xmlns:app="http://schemas.android.com/apk/res-auto"
                      xmlns:tools="http://schemas.android.com/tools"
                      android:layout_width="match_parent"
                      android:layout_height="match_parent"
                      tools:context=".SinglePlayer">   
    
              <include layout="@layout/activity_game_logic"/> 
          </androidx.constraintlayout.widget.ConstraintLayout>
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.