Jetpack Compose มีคอนเทนเนอร์เลย์เอาต์หลายรายการเพื่อช่วยคุณจัดโครงสร้างและจัดเรียงคอมโพเนนต์ UI แม้ว่า Composable ของเลย์เอาต์พื้นฐานอย่าง Row และ Column จะจัดการการจัดเรียงที่ตรงไปตรงมาได้ แต่แอปจำนวนมากต้องการโซลูชันคอนเทนเนอร์ที่ปรับเปลี่ยนตามอุปกรณ์และปรับเปลี่ยนได้มากขึ้นเมื่อขนาดหน้าจอเปลี่ยนแปลงและข้อมูลผู้ใช้เพิ่มขึ้น
คอนเทนเนอร์เลย์เอาต์ประกอบด้วยรายการต่อไปนี้
- Lazy list และ Lazy grid: คอมโพเนนต์ เช่น
LazyColumn,LazyRowและLazyVerticalGridที่แสดงชุดข้อมูลขนาดใหญ่หรือขนาดแบบไดนามิกได้อย่างมีประสิทธิภาพโดยการคอมโพสและจัดวางเฉพาะรายการที่มองเห็นได้ในวิวพอร์ตเท่านั้น - เพจเจอร์: คอนเทนเนอร์ เช่น
HorizontalPagerและVerticalPagerที่ช่วยให้ผู้ใช้ปัดหรือเลื่อนระหว่างหน้าเนื้อหาได้ - เลย์เอาต์แบบ Flow: คอนเทนเนอร์แบบ 1 มิติที่ปรับเปลี่ยนตามพื้นที่โฆษณา (
FlowRowและFlowColumn) ซึ่งจะตัดรายการที่ล้นไปยังแถวหรือคอลัมน์ถัดไปโดยอัตโนมัติเมื่อพื้นที่หมด - ตารางกริด: โครงสร้าง 2 มิติที่ยืดหยุ่นซึ่งแสดงรายการในเลย์เอาต์แบบหลายคอลัมน์หรือหลายแถวที่ปรับตามขนาดคอนเทนเนอร์
- FlexBox: คอนเทนเนอร์แบบปรับเปลี่ยนได้ที่ได้รับแรงบันดาลใจจาก CSS Flexbox ซึ่งช่วยให้ควบคุมวิธีที่รายการตัดขึ้นบรรทัดใหม่ ขยาย ย่อ และจัดแนวตามแกนหลักและแกนไขว้เพื่อเติมเต็มพื้นที่ว่างได้อย่างละเอียด
เลือกคอนเทนเนอร์เลย์เอาต์ที่ถูกต้อง
เมื่อสร้างเลย์เอาต์ใน Compose การเลือกระหว่างคอนเทนเนอร์เลย์เอาต์พื้นฐานและขั้นสูงขึ้นจะขึ้นอยู่กับการออกแบบของคุณ ไม่ว่ารายการจะต้องตัดขึ้นบรรทัดใหม่เมื่อพื้นที่จำกัดหรือไม่ และรายการจะปรับขนาดแบบไดนามิกอย่างไร
ตารางต่อไปนี้สรุปความสามารถของคอนเทนเนอร์เลย์เอาต์ 1 มิติของ Compose แต่ละรายการ
คอนเทนเนอร์ |
ตัดรายการขึ้นบรรทัดใหม่ |
การขยายต่อรายการ |
การหดตัวต่อรายการ |
ขนาดเริ่มต้นต่อรายการ |
รายการจะขยายจนเต็มพื้นที่ที่ใช้ได้ในหลายบรรทัด |
จัดเรียงรายการใหม่ |
การโหลดแบบ Lazy Loading |
เหมาะสำหรับ |
แถว / คอลัมน์ |
❌ |
✅ (ผ่าน |
❌ |
❌ |
❌ |
❌ |
❌ |
|
FlowRow / FlowColumn |
✅ |
จำกัด |
❌ |
❌ |
บางส่วน |
❌ |
❌ |
|
LazyRow / LazyColumn |
❌ |
❌ |
❌ |
❌ |
❌ |
❌ |
✅ |
|
FlexBox |
✅ |
✅ |
✅ |
✅ |
✅ |
✅ |
❌ |
|
ตารางต่อไปนี้จะสรุปความสามารถของ Grid และ Composable อื่นๆ ที่คล้ายกัน
คอนเทนเนอร์ |
การตรวจสอบความสอดคล้องแบบเข้มงวด 2 มิติ |
การขยายรายการ (คอลัมน์) |
การขยายรายการ (แถว) |
การโหลดแบบ Lazy Loading |
เหมาะสำหรับ |
ตารางกริด |
✅ |
✅ (ผ่าน |
✅ |
❌ |
|
LazyVerticalGrid |
✅ |
✅ (ผ่าน |
❌ |
✅ |
|
LazyStaggeredGrid |
❌ (1 มิติเท่านั้น) |
บางส่วน (เฉพาะแบบเต็มช่วง) |
❌ |
✅ |
|
LazyHorizontalGrid |
✅ |
❌ |
✅ |
✅ |
|
การรวมแถวและคอลัมน์ |
❌ |
❌ |
❌ |
❌ |
|