Wie füge ich Layout in Layout ein?

92

Wie füge ich Layout in Layout in Android ein?

Ich erstelle ein gemeinsames Layout. Ich möchte dieses Layout in eine andere Seite aufnehmen.

Mohan
quelle
Es gibt ein einfaches Anwendungsbeispiel [in diesem Beitrag] [1] [1]: stackoverflow.com/questions/2732682/…
Asaf Pinhassi

Antworten:

193

Bearbeiten: Wie in einem Kommentar zu Recht hier einige weitere Informationen angefordert. Verwenden Sie das includeTag

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

um das Layout einzuschließen, das Sie wiederverwenden möchten.

Überprüfen Sie diesen Link aus ...

Michael Rose
quelle
11
Nur ein kleines Detail: Verwenden Sie android: layout_width = "match_parent" anstelle von android: layout_width = "fill_parent". fill_parent ist veraltet.
Trinity
1
Kann ich ein Layout einfügen und einige seiner Eigenschaften über die XML festlegen, z. B. eine Textzeichenfolge im Unterlayout direkt im <include> -Tag festlegen?
JohnyTex
@JohnyTex Sie sind sich nicht sicher, ob Sie dies direkt im <include />Tag tun können. Sie können dies jedoch mit Java-Code tun. siehe Phileo99 Antwort unten zu wissen , wie Sie einen Verweis auf das mitgelieferte Layout zu erhalten. und dann können Sie den Inhalt ändern.
Moses
56

Beachten Sie, dass beim Einfügen android:id...in das <include />Tag die im enthaltenen Layout definierte ID überschrieben wird. Beispielsweise:

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

Dann würden Sie dieses enthaltene Layout im Code wie folgt referenzieren:

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

Versuche dies

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

Aus offiziellen Dokumenten zur Wiederverwendung von Layouts

Obwohl Android eine Vielzahl von Widgets bietet, um kleine und wiederverwendbare interaktive Elemente bereitzustellen, müssen Sie möglicherweise auch größere Komponenten wiederverwenden, für die ein spezielles Layout erforderlich ist. Um vollständige Layouts effizient wiederzuverwenden, können Sie mit dem Tag ein anderes Layout in das aktuelle Layout einbetten.

Hier ist meine header.xml- Datei, die ich mit dem include-Tag wiederverwenden kann

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

Nein, ich benutze die Tag in XML, um ein weiteres Layout aus einer anderen XML-Datei hinzuzufügen.

<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
quelle
Warum sollte die Textansicht in ein RelativeLayout und nicht als Stammansicht eingefügt werden?
Florian Walther
@ FlorianWalther Dies ist ein Beispiel
IntelliJ Amiya
Danke für die schnelle Antwort. Aber habe ich Recht, dass ich die Textansicht als Stammelement setzen könnte, oder fehlt mir etwas? Weil ich eine ProgressBar wiederverwenden möchte und mich frage, ob ich sie in ein Layout einfügen muss.
Florian Walther
@FlorianWalther Because I want to reuse a ProgressBarwelches Problem kommt?
IntelliJ Amiya
Es gibt kein Problem, es funktioniert. Aber alle Beispiele, die ich online sehe, setzen das einzelne Widget in ein anderes Layout und ich frage mich, warum.
Florian Walther
0

Weitere Informationen Verwenden Sie diesen 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>

Blockquote

  • Über dem Layout können Sie in anderen Aktivitäten verwenden

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