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.

aioobe
quelle
2
Bitte werfen Sie einen Blick auf die offizielle Android-Dokumentation: Wiederverwendung von Layouts mit <include />
JJD
stackoverflow.com/a/11093340/596555 , kann u helfen.
gekochtes Wasser
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>
yanchenko
quelle
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>
Habeeb Perwad
quelle
2

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

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

Huseyin
quelle
Was ist mit IDs?
Yousha Aleayoub