แท็กรวม
<include>
แท็กช่วยให้คุณสามารถที่จะแบ่งรูปแบบของคุณเป็นหลายไฟล์: มันจะช่วยให้การจัดการกับความซับซ้อนส่วนติดต่อผู้ใช้หรือยืดเยื้อ
สมมติว่าคุณแบ่งเลย์เอาต์ที่ซับซ้อนของคุณโดยใช้สองไฟล์รวมดังนี้:
top_level_activity.xml :
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/layout1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<!-- First include file -->
<include layout="@layout/include1.xml" />
<!-- Second include file -->
<include layout="@layout/include2.xml" />
</LinearLayout>
แล้วคุณจะต้องเขียนและinclude1.xml
include2.xml
โปรดทราบว่า xml จากไฟล์รวมนั้นจะถูกทิ้งในtop_level_activity
เค้าโครงของคุณในเวลาที่แสดงผล (คล้ายกับ#INCLUDE
แมโครสำหรับ C)
ไฟล์ include เป็นเลย์เอาต์ jane ธรรมดา
include1.xml :
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/textView1"
android:text="First include"
android:textAppearance="?android:attr/textAppearanceMedium"/>
... และinclude2.xml :
<?xml version="1.0" encoding="utf-8"?>
<Button xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/button1"
android:text="Button" />
ดู? ไม่มีอะไรแฟนซี โปรดทราบว่าคุณยังคงมีการประกาศ namespace xmlns:android="http://schemas.android.com/apk/res/android
หุ่นยนต์ที่มี
ดังนั้นเวอร์ชันที่แสดงผลของ top_level_activity.xmlคือ:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/layout1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<!-- First include file -->
<TextView
android:id="@+id/textView1"
android:text="First include"
android:textAppearance="?android:attr/textAppearanceMedium"/>
<!-- Second include file -->
<Button
android:id="@+id/button1"
android:text="Button" />
</LinearLayout>
ในโค้ด java ของคุณทั้งหมดนี้โปร่งใส: findViewById(R.id.textView1)
ในคลาสกิจกรรมของคุณจะส่งคืนวิดเจ็ตที่ถูกต้อง (แม้ว่าวิดเจ็ตนั้นจะถูกประกาศในไฟล์ xml ที่แตกต่างจากโครงร่างกิจกรรม)
และเชอร์รี่อยู่ด้านบน: เครื่องมือแก้ไขภาพจัดการสิ่งที่ว่ายน้ำ เลย์เอาต์ระดับสูงสุดแสดงผลพร้อม xml ที่มีให้
โครงเรื่องหนาขึ้น
เนื่องจากไฟล์ include เป็นไฟล์ xml เลย์เอาต์แบบคลาสสิกหมายความว่าต้องมีองค์ประกอบด้านบนหนึ่งรายการ ดังนั้นในกรณีที่ไฟล์ของคุณต้องมีมากกว่าหนึ่งวิดเจ็ตคุณจะต้องใช้เลย์เอาต์
สมมติว่าinclude1.xml
ตอนนี้มีสองTextView
: เค้าโครงจะต้องมีการประกาศ ลองเลือก a LinearLayout
.
include1.xml :
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/layout2"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/textView1"
android:text="Second include"
android:textAppearance="?android:attr/textAppearanceMedium"/>
<TextView
android:id="@+id/textView2"
android:text="More text"
android:textAppearance="?android:attr/textAppearanceMedium"/>
</LinearLayout>
top_level_activity.xmlจะแสดงผลเป็น:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/layout1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<!-- First include file -->
<LinearLayout
android:id="@+id/layout2"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/textView1"
android:text="Second include"
android:textAppearance="?android:attr/textAppearanceMedium"/>
<TextView
android:id="@+id/textView2"
android:text="More text"
android:textAppearance="?android:attr/textAppearanceMedium"/>
</LinearLayout>
<!-- Second include file -->
<Button
android:id="@+id/button1"
android:text="Button" />
</LinearLayout>
แต่รอสองระดับของLinearLayout
จะซ้ำซ้อน !
อันที่จริงทั้งสองซ้อนกันLinearLayout
เพื่อวัตถุประสงค์ใด ๆ ขณะที่ทั้งสองTextView
อาจจะรวมอยู่ภายใต้layout1
สำหรับว่าการแสดงผลเดียวกัน
แล้วเราจะทำอย่างไร
ป้อนแท็กผสาน
<merge>
แท็กเป็นเพียงแท็กหุ่นที่ให้องค์ประกอบระดับบนสุดที่จะจัดการกับชนิดของปัญหาความซ้ำซ้อนนี้
ตอนนี้include1.xmlกลายเป็น:
<merge xmlns:android="http://schemas.android.com/apk/res/android">
<TextView
android:id="@+id/textView1"
android:text="Second include"
android:textAppearance="?android:attr/textAppearanceMedium"/>
<TextView
android:id="@+id/textView2"
android:text="More text"
android:textAppearance="?android:attr/textAppearanceMedium"/>
</merge>
และตอนนี้top_level_activity.xmlจะแสดงผลเป็น:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/layout1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<!-- First include file -->
<TextView
android:id="@+id/textView1"
android:text="Second include"
android:textAppearance="?android:attr/textAppearanceMedium"/>
<TextView
android:id="@+id/textView2"
android:text="More text"
android:textAppearance="?android:attr/textAppearanceMedium"/>
<!-- Second include file -->
<Button
android:id="@+id/button1"
android:text="Button" />
</LinearLayout>
คุณบันทึกหนึ่งระดับลำดับชั้นหลีกเลี่ยงมุมมองที่ไร้ประโยชน์: Romain Guy นอนหลับได้ดีขึ้นแล้ว
ตอนนี้คุณมีความสุขมากกว่านี้ไหม
<TextView />
ไม่มีอะไรอื่น