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.