Como incluir layout dentro do layout?

Respostas:

193

Edit: Como em um comentário corretamente solicitado aqui mais algumas informações. Use a includetag

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

para incluir o layout que você deseja reutilizar.

Verifique este link ...

Michael Rose
fonte
11
apenas um pequeno detalhe: use android: layout_width = "match_parent" em vez de android: layout_width = "fill_parent". fill_parent está obsoleto.
Trinity
1
Posso incluir um layout e definir algumas de suas propriedades por meio do xml, por exemplo, definir uma string de texto no sublayout diretamente na tag <include>?
JohnyTex
@JohnyTex Não tenho certeza se você pode fazer isso diretamente na <include />tag, no entanto, você pode fazer isso usando o código java. veja a resposta de Phileo99 abaixo para saber como obter uma referência ao layout incluído. e então você pode alterar seu conteúdo.
Moisés de
56

Observe que se você incluir android:id...na <include />tag, isso substituirá qualquer id definido dentro do layout incluído. Por exemplo:

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

Em seguida, você faria referência a esse layout incluído no código da seguinte maneira:

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

Tente isto

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

De documentos oficiais sobre como reutilizar layouts

Embora o Android ofereça uma variedade de widgets para fornecer elementos interativos pequenos e reutilizáveis, você também pode precisar reutilizar componentes maiores que requerem um layout especial. Para reutilizar layouts completos com eficiência, você pode usar a tag para incorporar outro layout dentro do layout atual.

Aqui está meu arquivo header.xml, que posso reutilizar usando a tag de inclusão

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

Não, eu uso o tag em XML para adicionar outro layout de outro arquivo 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>
IntelliJ Amiya
fonte
Por que colocar o TextView em um RelativeLayout e não como a visualização raiz?
Florian Walther
@FlorianWalther Este é um exemplo
IntelliJ Amiya
Obrigado pela resposta rápida. Mas estou certo de que poderia colocar o TextView como o elemento raiz ou estou faltando alguma coisa? Porque eu quero reutilizar um ProgressBar e me pergunto se devo colocá-lo em um layout.
Florian Walther
@FlorianWalther, Because I want to reuse a ProgressBarque problema está vindo?
IntelliJ Amiya
Não tem problema, funciona. Mas todos os exemplos que vejo online colocam um único widget em outro layout e me pergunto por quê.
Florian Walther
0

Saiba mais usando este link 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>

Bloco de citação

  • Layout acima, você pode usar em outra atividade usando

     <?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>
Ajay Patel
fonte