ฉันใช้ RelativeLayout มาโดยตลอดทุกครั้งที่ฉันต้องการ View container เพราะมันมีความยืดหยุ่นแม้ว่าฉันจะต้องการแสดงสิ่งที่เรียบง่ายจริงๆก็ตาม
สามารถทำได้หรือไม่หรือฉันควรลองใช้ LinearLayout เมื่อทำได้จากมุมมองด้านประสิทธิภาพ / แนวปฏิบัติที่ดี
ขอบคุณ!
ฉันใช้ RelativeLayout มาโดยตลอดทุกครั้งที่ฉันต้องการ View container เพราะมันมีความยืดหยุ่นแม้ว่าฉันจะต้องการแสดงสิ่งที่เรียบง่ายจริงๆก็ตาม
สามารถทำได้หรือไม่หรือฉันควรลองใช้ LinearLayout เมื่อทำได้จากมุมมองด้านประสิทธิภาพ / แนวปฏิบัติที่ดี
ขอบคุณ!
คำตอบ:
ในการพูดคุยที่ Google I / O 2013 (การเขียนมุมมองที่กำหนดเองสำหรับ Android) Romain Guy ได้ชี้แจงความเข้าใจผิดที่ทำให้ทุกคนเริ่มใช้ RelativeLayouts สำหรับทุกสิ่ง RelativeLayout จะต้องทำการวัดสองรอบเสมอ โดยรวมแล้วจะไม่สำคัญตราบเท่าที่ลำดับชั้นมุมมองของคุณเรียบง่าย แต่ถ้าลำดับชั้นของคุณซับซ้อนการทำแบบวัดพิเศษอาจมีค่าใช้จ่ายสูงพอสมควร นอกจากนี้หากคุณซ้อน RelativeLayouts คุณจะได้รับอัลกอริทึมการวัดแบบเอ็กซ์โพเนนเชียล
เว้นแต่คุณจะวาง Views จำนวนมาก (เช่นใน ListView) ประสิทธิภาพของการเลือกระหว่าง LinearLayout หรือ RelativeLayout นั้นมีความสำคัญเล็กน้อย เลือกสิ่งที่สะดวกที่สุดในการใช้สำหรับงานและกังวลเกี่ยวกับประสิทธิภาพเมื่อคุณต้องการเท่านั้น
และนี่คือสิ่งที่เอกสารอย่างเป็นทางการเกี่ยวกับการสร้างเลย์เอาต์ที่มีประสิทธิภาพกล่าวเกี่ยวกับประสิทธิภาพของ RelativeLayout และ LinearLayout:
การยึดติดกับคุณสมบัติพื้นฐานนั้นไม่ใช่วิธีที่มีประสิทธิภาพสูงสุดในการสร้างอินเทอร์เฟซผู้ใช้ ตัวอย่างทั่วไปคือการใช้ LinearLayout ในทางที่ผิดซึ่งนำไปสู่การเพิ่มจำนวนการดูในลำดับชั้นของมุมมอง ทุกมุมมอง - หรือแย่กว่านั้นคือตัวจัดการเลย์เอาต์ทุกตัวที่คุณเพิ่มลงในแอปพลิเคชันของคุณมีค่าใช้จ่าย: การเริ่มต้นเค้าโครงและการวาดจะช้า เลย์เอาต์พาสอาจมีราคาแพงเป็นพิเศษเมื่อคุณซ้อน LinearLayout หลายตัวที่ใช้พารามิเตอร์น้ำหนักซึ่งจะต้องวัดเด็กสองครั้ง
Relativelayout มีประสิทธิภาพมากกว่า Linearlayout
จากที่นี่ :
เป็นความเข้าใจผิดทั่วไปที่ว่าการใช้โครงสร้างเค้าโครงพื้นฐานจะนำไปสู่รูปแบบที่มีประสิทธิภาพสูงสุด อย่างไรก็ตามแต่ละวิดเจ็ตและเลย์เอาต์ที่คุณเพิ่มลงในแอปพลิเคชันของคุณต้องมีการเตรียมใช้งานเค้าโครงและการวาดภาพ ตัวอย่างเช่นการใช้ LinearLayout อินสแตนซ์แบบซ้อนกันอาจทำให้เกิดลำดับชั้นมุมมองที่ลึกเกินไป นอกจากนี้การซ้อน LinearLayout หลายอินสแตนซ์ที่ใช้พารามิเตอร์ layout_weight อาจมีราคาแพงเป็นพิเศษเนื่องจากเด็กแต่ละคนต้องวัดสองครั้ง สิ่งนี้มีความสำคัญอย่างยิ่งเมื่อเค้าโครงสูงเกินจริงซ้ำ ๆ เช่นเมื่อใช้ใน ListView หรือ GridView
อัปเดต 2018:ในรุ่น N ของ Android ConstraintLayout
คลาสนี้มีฟังก์ชันการทำงานที่คล้ายกันRelativeLayout
แต่มีต้นทุนที่ต่ำกว่ามาก เป็นตัวจัดการเลย์เอาต์ที่มีประสิทธิภาพมากและควรใช้เมื่อใดก็ตามที่จำเป็นในการสร้าง GUI ที่ซับซ้อน
คุณสามารถลอง
<LinearLayout>
<ViewPager/><!--Loading images from net, it is very good as a testing case.-->
<ViewPagerIndicator/>
<TextView/> <!--Show some info about page-->
</LinearLayout>
<RelativeLayout>
<ViewPager/><!--Loading images from net, it is very good as a testing case.-->
<ViewPagerIndicator below="id of ViewPager"/>
<TextView below="id of ViewPagerIndicator"/> <!--Show some info about page-->
</RelativeLayout>
คุณจะพบว่ามีหลายอย่างที่แตกต่างกันหากเพจของคุณโหลดรูปภาพจากอินเทอร์เน็ต ในกรณีนี้ LinearLayout ดีกว่า RelativeLayout 100% เลยทีเดียว