Comment inclure la mise en page dans la mise en page?

94

Comment inclure la mise en page dans la mise en page dans Android?

Je crée une mise en page commune. Je souhaite inclure cette mise en page dans une autre page.

mohan
la source
Il y a un exemple d'utilisation simple [dans ce post] [1] [1]: stackoverflow.com/questions/2732682/…
Asaf Pinhassi

Réponses:

194

Edit: Comme dans un commentaire demandé à juste titre ici quelques informations supplémentaires. Utilisez le includetag

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

pour inclure la mise en page que vous souhaitez réutiliser.

Consultez ce lien ...

Michael Rose
la source
11
juste un petit détail: utilisez android: layout_width = "match_parent" au lieu d'android: layout_width = "fill_parent". fill_parent est obsolète.
Trinity
1
Puis-je inclure une mise en page et définir certaines de ses propriétés via le xml, par exemple définir une chaîne de texte dans la sous-mise en page directement dans la balise <include>?
JohnyTex
@JohnyTex Je ne sais pas si vous pouvez le faire directement dans la <include />balise, cependant, vous pouvez le faire en utilisant le code java. voir la réponse de Phileo99 ci-dessous pour savoir comment obtenir une référence à la mise en page incluse. et vous pouvez ensuite modifier son contenu.
Moses
56

Notez que si vous incluez android:id...dans la <include />balise, il remplacera tout identifiant défini dans la mise en page incluse. Par exemple:

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

Ensuite, vous référeriez cette mise en page incluse dans le code comme suit:

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

Essaye ça

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

À partir de documents officiels sur la réutilisation des mises en page

Bien qu'Android propose une variété de widgets pour fournir des éléments interactifs petits et réutilisables, vous devrez peut-être également réutiliser des composants plus volumineux qui nécessitent une mise en page spéciale. Pour réutiliser efficacement des mises en page complètes, vous pouvez utiliser la balise pour incorporer une autre mise en page dans la mise en page actuelle.

Voici mon fichier header.xml que je peux réutiliser en utilisant la balise include

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

Non j'utilise le balise XML pour ajouter une autre mise en page à partir d'un autre fichier 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
la source
Pourquoi mettre le TextView dans un RelativeLayout et non en tant que vue racine?
Florian Walther
@FlorianWalther Ceci est un exemple
IntelliJ Amiya
Merci pour la réponse rapide. Mais ai-je raison de dire que je pourrais mettre le TextView comme élément racine ou est-ce que je manque quelque chose? Parce que je veux réutiliser un ProgressBar et me demande si je dois le mettre dans une mise en page.
Florian Walther
@FlorianWalther Because I want to reuse a ProgressBarquel problème vient?
IntelliJ Amiya
Il n'y a pas de problème, ça marche. Mais tous les exemples que je vois en ligne mettent le widget unique dans une autre mise en page et je me demande pourquoi.
Florian Walther
0

En savoir plus en utilisant ce lien 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

  • Au-dessus de la mise en page, vous pouvez l'utiliser dans d'autres activités en utilisant

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