Einfaches Beispiel für die Verwendung von <merge> und <include> in Android-XML-Layouts


75

Ich bin neugierig auf die <merge>und <include>Tags in Android XML-Layouts. Ich habe zwei Tutorials gelesen, aber noch keine einfache Beispielverwendung gefunden.

Würde mich freuen, wenn jemand ein solches Beispiel liefern oder einen Zeiger auf eines geben könnte.


2
Bitte werfen Sie einen Blick auf die offizielle Android-Dokumentation: Wiederverwendung von Layouts mit <include />
— JJD


Zu Ihrer Information, wenn Sie dies mit Menüs verwenden möchten
— Joshua Pinter

Antworten:


97

some_activity.xml :

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent" android:layout_height="fill_parent"
    android:orientation="vertical">

    // some views

    <include layout="@layout/view_part"/>

   // probably more views

</LinearLayout>

view_part.xml :

<merge xmlns:android="http://schemas.android.com/apk/res/android">

    // the views to be merged

</merge>

Das Merge-Ding wird also mit seinem Dateinamen bezeichnet ... kein ID-Attribut in der Merge-Datei?
— Aioobe

19
@aioobe richtig. <include>bedeutet im Grunde "nimm diese Datei und füge ihren Inhalt hier ein".
— Yanchenko

Hallo, eigentlich stehe ich hier vor einem ernsten Problem. Ich verwende Einstellungen und spezifiziere Layouts, die innerhalb der Einstellungen verwendet werden sollen. Innerhalb des Layouts verwende ich die Include-Merger-Funktion (so dass ich einen Platzhalter habe, der je nach Version einen Schalter oder ein Kontrollkästchen verwendet). Das Problem liegt in der onPostCreate-Methode meiner bevorzugten Umgebung, wenn ich versuche, die Ansicht zu finden (dh Kontrollkästchen / Schalter), erhalte ich die Ansicht immer als null! Können Sie bitte hier helfen? stackoverflow.com/questions/15708599/…
— Adithya

2
Obwohl die akzeptierte Antwort korrekt ist, habe ich festgestellt, dass der Artikel hier: http://mfarhan133.wordpress.com/2010/10/01/reusing-layout-include-merge-tag-for-androd/ mir geholfen hat, ihn besser zu visualisieren. Hoffe es hilft jemandem.
— Wayne Phipps

Ist dies mit einer XML-Menüdeklaration machbar?
— Joshua Pinter

6

Nehmen Sie ein Beispiel:

Ich habe zwei Tags <EditText>und <ListView >mehr als eine Benutzeroberfläche. Also habe ich eine XML-Datei wie unten angegeben erstellt, um sie in alle diese Benutzeroberflächen aufzunehmen.

<?xml ...>
<EditText ... />
<ListView ... />   

Das obige XML ist kein gültiges XML, da es kein Stammelement hatte. Ein Root-Element wird also nur für XML benötigt. <merge>ist die Lösung wie folgt:

<?xml ...>
<merge xmlns:android="http://schemas.android.com/apk/res/android">
    <EditText ... />
    <ListView ... />
</merge>


2

id fügt keinen Code ein, sonst hätten relative Layoutparameter funktioniert. Es wird eine andere Verarbeitung durchgeführt


2

<merge>Tag wird verwendet, um die Anzahl der Ebenen zu verringern und die Leistung beim Rendern von Layouts zu erhöhen. Tag wird mit <include>Tag perfekt zusammen verwendet.

Nehmen wir ein Beispiel, wir haben ein Login-Layout und werden für mehr als eines im Umfang unserer App verwendet. Während wir das Tag verwenden, um login_layout anzuzeigen, können wir ein Level verwenden und ihm entkommen.

Ich rate Ihnen auch, die Tricks zu Layouts zu lesen. http://android-developers.blogspot.com.tr/2009/03/android-layout-tricks-3-optimize-by.html

login_form.xml

<?xml version="1.0" encoding="utf-8"?>
<!-- Login form -->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical" >
    <EditText
        android:id="@+id/email"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="Email..."
        android:inputType="textEmailAddress"
        android:maxLines="1"
        android:singleLine="true"
        android:visibility="visible" />

    <EditText
        android:id="@+id/password"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="Password.."
        android:imeActionId="@+id/login"
        android:imeOptions="actionUnspecified"
        android:inputType="textPassword"
        android:maxLines="1"
        android:singleLine="true"
        android:text="1337"
        android:visibility="visible" />

    <Button
        android:id="@+id/sign_in_button"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:layout_marginTop="16sp"
        android:paddingLeft="32sp"
        android:paddingRight="32sp"
        android:text="Login"
        android:visibility="visible" />

</LinearLayout>

example_layout.xml (jedes Layout, das login_form.xml enthalten soll)

<merge xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools" >

    <include layout="@layout/login_form" />

</merge>

Wir können die Ebenenhierarchie sehen Geben Sie hier die Bildbeschreibung ein


Was ist mit IDs?
— Yousha Aleayoub
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.