2010-04-28 9 views
71

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

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

+2

Bitte werfen Sie einen Blick auf das Off iziale Android-Dokumentation: [Layouts erneut verwenden mit ] (http://developer.android.com/training/improving-layouts/reusing-layouts.html) – JJD

+0

http://stackoverflow.com/a/11093340/596555, kann dir helfen – boiledwater

+0

FYI, wenn Sie dies mit ** Menüs ** verwenden möchten, haben Sie kein Glück, aber Sie können mehrere XML-Dateien aufblasen, wie hier beschrieben: http: // stackoverflow.com/questions/4337034/include-menu-im-menü-android –

Antwort

93

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

so wird das merge-dingy mit seinem dateinamen bezeichnet ... kein id-attribut in der merge-datei? – aioobe

+19

@aioobe rechts. '' bedeutet im Grunde genommen 'nimm diese Datei und füge ihren Inhalt hier ein'. – yanchenko

+0

Hi, 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 include-merger-Funktionalität (so dass ich einen Platzhalter habe, der je nach Version einen Schalter oder ein Kontrollkästchen verwendet). Das Problem ist in meiner onPostCreate-Methode, wenn ich versuche, die Ansicht (d. H. Checkbox/Schalter) zu finden, ich bekomme immer die Ansicht als null! Kannst du bitte hier helfen? http://stackoverflow.com/questions/15708599/findviewbyid-returns-null-for-preference-layout – Adithya

2

id Code nicht anders relativen Layout-Parameter einfügen würde gearbeitet haben. Es gibt eine andere Verarbeitung

4

ein Beispiel:

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

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

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

<merge>-Tag verwendet wird, um die Zahl der Stufen zu verringern, die Leistung von Rendering-Layout 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 einen im Umfang unserer App verwendet. Während wir ein Tag verwenden, um login_layout zu zeigen, können wir eine Ebene verwenden und können diese umgehen.

Ich rate Ihnen auch, die Tricks über 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 (beliebige Layout wir login_form.xml aufnehmen möchten)

<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 sehen, die Level-Hierarchie enter image description here

+0

Was ist mit IDs? –

Verwandte Themen