ตั้งค่าลักษณะการทำงานของคอนเทนเนอร์

หากต้องการกำหนดค่าลักษณะการทำงานของคอนเทนเนอร์ FlexBox ให้สร้างบล็อก FlexBoxConfig แล้วระบุโดยใช้พารามิเตอร์ config

FlexBox(
    config = {
        direction = FlexDirection.Column
        wrap = FlexWrap.Wrap
        alignItems = FlexAlignItems.Center
        alignContent = FlexAlignContent.SpaceAround
        justifyContent = FlexJustifyContent.Center
        gap(16.dp)
    }
) { // child items
}

ใช้ FlexBoxConfig เพื่อกำหนดทิศทางเลย์เอาต์ ลักษณะการตัดคำ การจัดแนว และช่องว่างระหว่างรายการ

ทิศทางเลย์เอาต์

พร็อพเพอร์ตี้ direction จะกำหนดแกนหลัก ซึ่งกำหนดทิศทางที่วางรายการ

  • Row (ค่าเริ่มต้น): ตั้งแกนหลักเป็นแนวนอน ในภาษาที่อ่านจากซ้ายไปขวา การจัดวางจะเป็นแบบซ้ายไปขวา และในภาษาที่อ่านจากขวาไปซ้ายจะเป็นการจัดวางในทิศทางตรงกันข้าม
  • RowReverse: กลับทิศทางของ Row
  • Column: ตั้งค่าแกนหลักเป็นแนวตั้ง จากบนลงล่าง
  • ColumnReverse: กลับทิศทางของ Column

จัดแนวรายการและกระจายพื้นที่ว่าง

ส่วนต่อไปนี้จะอธิบายวิธีจัดแนวรายการและกระจายพื้นที่ว่างเพิ่มเติม ตามแกนหลักและแกนขวาง

ตามแนวแกนหลัก

ใช้ justifyContent เพื่อกระจายรายการตามแกนหลัก ตารางต่อไปนี้แสดงลักษณะการทำงานเมื่อทิศทางเป็น Row

ภาพแกนหลักแนวนอน

Start

รายการที่จัดแนวไปที่จุดเริ่มต้นของแกนหลัก

Center

รายการที่จัดแนวไว้ตรงกลางแกนหลัก

End

รายการที่จัดแนวไปที่จุดสิ้นสุดของแกนหลัก

SpaceBetween

รายการที่กระจายไปตามแกนหลักโดยมีช่องว่างระหว่างรายการ

SpaceAround

รายการที่กระจายไปตามแกนหลักโดยมีพื้นที่รอบๆ

SpaceEvenly

รายการที่กระจายไปตามแกนหลักโดยมีพื้นที่ว่างรอบๆ อย่างเท่าๆ กัน

ตามแกนไขว้

ใช้ alignItems เพื่อจัดแนวรายการตามแกนไขว้ภายในบรรทัดเดียว คุณสามารถลบล้างลักษณะการทำงานนี้ได้โดยใช้รายการแต่ละรายการโดยใช้ตัวแก้ไข alignSelf

รูปภาพต่อไปนี้แสดงลักษณะการทำงานเมื่อทิศทางเป็น Row

ภาพแกนกากบาทแนวตั้ง รายการที่จัดแนวไปที่จุดเริ่มต้นของแกนไขว้ รายการที่จัดแนวไปที่จุดสิ้นสุดของแกนไขว้ รายการที่จัดแนวไปยังกึ่งกลางของแกนไขว้ รายการจะยืดจนเต็มแกนไขว้ รายการที่จัดแนวกับเส้นฐานตามแกนไขว้

Start

End

Center

Stretch

Baseline

ใช้ alignContent เพื่อจัดแนวบรรทัดไปยังแกนไขว้และกระจาย ช่องว่างเพิ่มเติมระหว่างบรรทัด พร็อพเพอร์ตี้นี้จะมีผลก็ต่อเมื่อมีหลายบรรทัด (เปิดใช้การตัดคำ) รูปภาพต่อไปนี้แสดงลักษณะการทำงานเมื่อทิศทาง เป็น Row

ภาพแกนกากบาทแนวตั้ง รายการหลายบรรทัดที่จัดแนวให้ตรงกับจุดเริ่มต้นของแกนไขว้ รายการหลายบรรทัดที่จัดแนวไปที่ส่วนท้ายของแกนไขว้ รายการหลายบรรทัดที่จัดแนวไปยังกึ่งกลางของแกนไขว้ รายการหลายบรรทัดยืดจนเต็มแกนไขว้ รายการหลายบรรทัดที่กระจายตามแกนไขว้โดยมีช่องว่างระหว่างรายการ รายการหลายบรรทัดกระจายไปตามแกนไขว้โดยมีพื้นที่รอบๆ

Start

End

Center

Stretch

SpaceBetween

SpaceAround

รวมรายการ

การตัดข้อความช่วยให้FlexBoxคอนเทนเนอร์แสดงได้หลายบรรทัด โดยจะย้ายรายการที่ไม่พอดี ไปยังแถวหรือคอลัมน์ใหม่ตามแกนไขว้ กำหนดค่าลักษณะการตัดข้อความ โดยใช้ wrap

ค่า FlexWrap

ตัวอย่างการใช้ทิศทาง Row

NoWrap (ค่าเริ่มต้น): ป้องกันไม่ให้รายการตัดข้อความ รายการจะล้นหากขนาดหลักไม่เพียงพอ

รายการในบรรทัดเดียวล้นคอนเทนเนอร์เนื่องจากปิดใช้การตัดคำ

Wrap: เมื่อมีพื้นที่ไม่เพียงพอสำหรับรายการ (รวมถึงช่องว่าง) ระบบจะสร้างบรรทัดใหม่ในทิศทางของแกนไขว้ เช่น หากทิศทางคือ Row ระบบจะเพิ่มบรรทัดใหม่ด้านล่าง

รายการจะขึ้นบรรทัดใหม่ด้านล่างเนื่องจากเปิดใช้การตัดคำ

WrapReverse: เหมือนกับ Wrap ยกเว้นจะเพิ่มบรรทัดใหม่ในทิศทางตรงกันข้ามกับแกนขวาง เช่น หากทิศทางเป็น Row ระบบจะเพิ่มบรรทัดใหม่ด้านบน

รายการที่ขึ้นบรรทัดใหม่ด้านบนเนื่องจากเปิดใช้การขึ้นบรรทัดใหม่แบบย้อนกลับ

ตัวอย่างต่อไปนี้แสดงวิธีการทำงานของอัลกอริทึมการตัดคำ FlexBox คอนเทนเนอร์ FlexBox มีขนาดหลักเป็น 100dp โดยตั้งค่า wrap เป็น FlexWrap.Wrap และมีช่องว่างเป็น 8dp โดยมีรายการ 3 รายการที่มี basis 20dp 40dp และ 50dp ตามลำดับ

ขณะนี้มี100dpที่ว่างในสาย บุตรคนที่ 1 อายุ 20dp มีที่ว่าง จึงวางเด็ก 1 ไว้ในแถว

รายการแรกที่วางในคอนเทนเนอร์ FlexBox
รูปที่ 1 รายการแรกที่วางในคอนเทนเนอร์ FlexBox

ขณะนี้มี80dpที่ว่างในสาย ช่องว่างคือ 8dp บุตรคนที่ 2 คือ 40dp พื้นที่ที่จำเป็นคือ 48dp มีช่องว่าง ดังนั้นจึงวางช่องว่างและ Child 2 ไว้ในบรรทัด

รายการแรกที่วางในคอนเทนเนอร์ FlexBox
รูปที่ 2 รายการที่ 2 วางในคอนเทนเนอร์ FlexBox หลังจากรายการแรก

ขณะนี้มี32dpที่ว่างในสาย ช่องว่างคือ 8dp บุตรหลานคนที่ 3 มีอายุ 50dp พื้นที่ที่จำเป็นคือ 58dp บรรทัดปัจจุบันมีพื้นที่ไม่เพียงพอ จึงวาง Child 3 ในบรรทัดใหม่

รายการที่ 3 อยู่ในบรรทัดใหม่เนื่องจากไม่พอดีกับบรรทัดแรก
รูปที่ 3 รายการที่ 3 วางในบรรทัดใหม่เนื่องจากไม่พอดีกับบรรทัดแรก

เพิ่มช่องว่างระหว่างรายการ

เพิ่มช่องว่างระหว่างแถวและคอลัมน์โดยใช้ rowGap และ columnGap ซึ่งมีประโยชน์ ในการหลีกเลี่ยงการเพิ่มตัวแก้ไขการเว้นวรรคให้กับองค์ประกอบย่อย

Row gap จะเพิ่มพื้นที่แนวตั้งระหว่างรายการ ช่องว่างของคอลัมน์จะเพิ่มพื้นที่แนวนอนระหว่างรายการ Gap จะเพิ่มทั้งพื้นที่แนวนอนและแนวตั้งระหว่างรายการ

rowGap

เพิ่มพื้นที่แนวตั้งระหว่างรายการและบรรทัด

columnGap

เพิ่มพื้นที่แนวนอนระหว่างรายการและบรรทัด

gap เป็นฟังก์ชันแสนสะดวกที่เพิ่มทั้ง columnGap และ rowGap