ฉันพยายามมาสองสามวันแล้วเพื่อทำให้เลย์เอาต์ของฉันมีประสิทธิภาพมากขึ้นโดยการแปลงจากการใช้หลายระดับที่ซ้อนกันLinearLayouts
เป็นหนึ่งRelativeLayout
และพบปัญหาเล็กน้อยที่ฉันไม่สามารถหาวิธีแก้ปัญหาสำหรับ ...
ฉันค้นหากลุ่มผู้เริ่มต้นใช้งาน Android และไซต์นี้แล้วและไม่พบสิ่งใดที่จะช่วยฉันแก้ปัญหาได้
ฉันอ่านในบล็อกหนึ่งที่คุณสามารถรวมเค้าโครงเข้ากับการรวมและรวมแท็กได้ ดังนั้นสิ่งที่ฉันมีคือไฟล์เลย์เอาต์หลักที่มีRelativeLayout
องค์ประกอบรูท ภายในนั้นฉันมี 5 แท็กที่อ้างอิงไฟล์เลย์เอาต์ xml ที่แตกต่างกัน 5 ไฟล์ซึ่งแต่ละไฟล์มีองค์ประกอบผสานสำหรับรูท (ไฟล์ผสานทั้งหมดของฉันเหมือนกันยกเว้นรหัสในนั้น)
ฉันพบปัญหาสองประการซึ่งฉันจะอธิบายหลังจากโพสต์โค้ดเค้าโครงเวอร์ชันที่เรียบง่าย:
ตัวอย่างไฟล์เค้าโครงหลัก:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/translucent_gray" >
<include
android:id="@+id/running_gallery_layout_id"
layout="@layout/running_gallery_layout" />
<include
android:id="@+id/recent_gallery_layout_id"
layout="@layout/recent_gallery_layout"
android:layout_below="@id/running_gallery_layout_id" />
<include
android:id="@+id/service_gallery_layout_id"
layout="@layout/service_gallery_layout"
android:layout_below="@id/recent_gallery_layout_id" />
<include
android:id="@+id/process_gallery_layout_id"
layout="@layout/process_gallery_layout"
android:layout_below="@id/service_gallery_layout_id" />
</RelativeLayout>
ตัวอย่างรวมไฟล์ผสาน:
<?xml version="1.0" encoding="utf-8"?>
<merge xmlns:android="http://schemas.android.com/apk/res/android">
<TextView
style="@style/TitleText"
android:id="@+id/service_gallery_title_text_id"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="left"
android:text="@string/service_title" />
<Gallery
android:id="@+id/service_gallery_id"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:layout_below="@id/service_gallery_title_text_id" />
<TextView
style="@style/SubTitleText"
android:id="@+id/service_gallery_current_text_id"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/service_gallery_title_text_id"
android:layout_above="@id/service_gallery_id" />
</merge>
ฉันพบปัญหาสองประการ:
1) android:layout_*
ดูเหมือนว่าแอตทริบิวต์จะถูกละเว้นเมื่อใช้ในแท็กรวมและรูปแบบที่ผสานทั้งหมดจะแสดงอยู่ด้านบนของกันและกัน ตามโพสต์นี้ ( http://developer.android.com/resources/articles/layout-tricks-reuse.html ) " android:layout_*
แอตทริบิวต์ใด ๆ ที่สามารถใช้กับ<include />
แท็ก"
2) เนื่องจากฉันไม่สามารถทำงานนี้ได้ฉันจึงตัดสินใจลองเพิ่มandroid:layout_below
แอตทริบิวต์ให้กับTextView
รายการแรกในไฟล์เค้าโครงผสานแต่ละไฟล์ซึ่งหมายความว่าไฟล์ผสานแต่ละไฟล์จะอ้างอิง id จากไฟล์เค้าโครงการผสานอื่น ... ส่วนใหญ่แล้ว ใช้งานได้จริงและเค้าโครงของฉันก็ดูดี อย่างไรก็ตามฉันได้รับข้อผิดพลาดเกี่ยวกับandroid:layout_below
แอตทริบิวต์หนึ่งที่แจ้งว่าไม่พบรหัสที่ฉันระบุ ... ฉันได้ตรวจสอบรหัสสองครั้งและสามครั้งเพื่อให้แน่ใจว่าถูกต้อง ส่วนที่แปลกที่สุดคือฉันใช้AutoFill
คุณลักษณะนี้เพื่อใส่รหัสในแอตทริบิวต์ตั้งแต่แรก
หากใครมีข้อเสนอแนะหรือวิธีแก้ปัญหาฉันยินดีเป็นอย่างยิ่งที่จะลองใช้ นอกจากนี้หากใครสามารถคิดวิธีให้ฉันมีไฟล์เลย์เอาต์ xml ผสานหนึ่งไฟล์แทนที่จะเป็น 5 ที่จะได้รับการชื่นชมอย่างมาก ฉันหาวิธีทำไม่ได้เพราะฉันต้องการเข้าถึงแต่ละรายการในไฟล์เค้าโครงผสานที่รันไทม์ ...