2010-04-28 31 views
71

Tôi tò mò về các thẻ <merge><include> trong bố cục XML của Android. Tôi đã đọc hai hướng dẫn, nhưng chưa tìm thấy một ví dụ sử dụng đơn giản.Ví dụ đơn giản về việc sử dụng <merge> và <include> trong bố cục XML Android

Sẽ rất vui nếu ai đó có thể cung cấp ví dụ như vậy hoặc đưa con trỏ đến một ví dụ.

+2

Vui lòng xem phần tắt tài liệu hướng dẫn về icial Android: [Tái sử dụng Bố cục với ] (http://developer.android.com/training/improving-layouts/reusing-layouts.html) – JJD

+0

http://stackoverflow.com/a/11093340/596555, có thể giúp u. – boiledwater

+0

FYI, nếu bạn đang tìm cách sử dụng điều này với ** menu **, bạn đã hết may mắn, nhưng bạn có thể thổi phồng nhiều tệp XML, như được mô tả ở đây: http: // stackoverflow.com/questions/4337034/include-menu-in-menu-android –

Trả lời

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

để điều kiện hợp nhất được gọi bằng tên tệp ... không có thuộc tính id trong tệp hợp nhất? – aioobe

+19

@aioobe đúng. ' 'về cơ bản có nghĩa là' lấy tệp đó và dán nội dung của nó ở đây '. – yanchenko

+0

hi, thực ra tôi đang đối mặt với một vấn đề nghiêm trọng ở đây. Tôi đang sử dụng tùy chọn và chỉ định bố cục để sử dụng bên trong các tùy chọn. Bên trong bố trí tôi đang sử dụng chức năng bao gồm sáp nhập (để tôi có một người giữ chỗ sẽ sử dụng chuyển đổi hoặc hộp kiểm dựa trên phiên bản). Vấn đề nằm trong phương thức onPostCreate của tôi khi tôi cố gắng tìm chế độ xem (ví dụ: hộp kiểm/chuyển đổi), tôi luôn nhận được chế độ xem là rỗng! Bạn có thể giúp đỡ ở đây không? http://stackoverflow.com/questions/15708599/findviewbyid-returns-null-for-preference-layout – Adithya

2

id không dán mã thông số bố trí khác tương đối đã làm việc. Có một số cách xử lý khác nhau

4

Lấy một ví dụ:

Tôi có hai thẻ <EditText><ListView > đến nhiều hơn một UI. Vì vậy, tôi đã tạo một tệp XML như được đưa ra dưới đây để bao gồm trong tất cả các giao diện người dùng như vậy.

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

XML ở trên không hợp lệ vì nó không có phần tử gốc. Vì vậy, một phần tử gốc là cần thiết chỉ vì lợi ích của XML. <merge> sự là giải pháp như đưa ra dưới đây:

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

<merge> thẻ được sử dụng để giảm thiểu số lượng các cấp độ để tăng hiệu suất của bố trí rendering. thẻ được sử dụng với thẻ <include> hoàn hảo cùng nhau.

Lấy ví dụ, chúng tôi có bố cục đăng nhập và được sử dụng cho nhiều hơn một phạm vi trong ứng dụng của chúng tôi. Trong khi sử dụng thẻ để hiển thị login_layout, chúng tôi có thể sử dụng và có thể thoát khỏi một cấp độ.

Tôi cũng khuyên bạn nên đọc các mẹo về bố cục. 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 (bất kỳ bố trí chúng tôi muốn bao gồm login_form.xml)

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

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

</merge> 

Chúng ta có thể thấy hệ thống phân cấp mức enter image description here

+0

Điều gì về ID? –

Các vấn đề liên quan