ใน Jetpack Compose Glimmer นั้น VerticalStack เป็นเลย์เอาต์ที่เลื่อนได้ในแนวตั้งแบบ Lazy ซึ่งจัดเรียงรายการในลำดับสามมิติที่ซ้อนทับกันในเชิงภาพ รายการหลักจะแสดงอย่างโดดเด่นในเบื้องหน้า ขณะที่รายการถัดๆ ไปจะวางอยู่ด้านหลัง
ลักษณะการทำงานของการเลื่อนและการวางตำแหน่ง
เนื่องจากสแต็กจะจัดเรียงรายการในเลย์เอาต์ที่กะทัดรัดและซ้อนทับกัน จึงมี ลักษณะการทำงานบางอย่างที่แตกต่างจากคอมโพเนนต์แบบลำดับประเภทอื่นๆ เช่น รายการ
- เมื่อผู้ใช้เลื่อนในแนวตั้ง รายการเบื้องหน้าที่ใช้งานอยู่จะเลื่อนออกจากมุมมอง ทำให้รายการที่อยู่ด้านล่างเลื่อนเข้ามาอยู่ในตำแหน่งเบื้องหน้าที่โดดเด่น
- รายการจะ Snap-animate โดยใช้ Spring Animation เฉพาะไปยังตำแหน่งเบื้องหน้าเสมอหลังจากที่ท่าทางของผู้ใช้สิ้นสุดลง
- รายการจะวางตำแหน่งตามแกน Z โดยรายการที่อยู่ไกลออกไปในรายการจะวางอยู่ด้านหลังรายการหลัก
การจัดการโฟกัส
VerticalStack ใช้ระบบโฟกัสเฉพาะเพื่อให้แน่ใจว่ารายการเบื้องหน้าปัจจุบันจะเป็นเป้าหมายหลักสำหรับการโต้ตอบของผู้ใช้เสมอ
- โฟกัสเริ่มต้นและการกลับเข้า: โฟกัสเริ่มต้นและการกลับเข้าของโฟกัสจะไปที่ รายการบนสุดปัจจุบันของสแต็ก
- การแจ้งเตือนโฟกัสอัตโนมัติ: เมื่อรายการเปลี่ยนไป สแต็กจะขอโฟกัส สำหรับรายการบนสุด
- การติดตามโฟกัส: แต่ละรายการใช้
onFocusChangedเพื่อแจ้งStackStateเกี่ยวกับสถานะโฟกัสของรายการนั้นๆ
ตัวอย่าง: สร้างสแต็กแนวตั้ง
โค้ดต่อไปนี้จะสร้างสแต็กแนวตั้งที่มีรายการการ์ด 2-3 รายการ
@Composable fun VerticalStackSample() { VerticalStack { item { Card { Text("Top Card") } } item { Card { Text("Second Card") } } item { Card { Text("Third Card") } } } }