NativeScript - คอนเทนเนอร์เค้าโครง

NativeScript จัดเตรียมคอลเลกชันของส่วนประกอบคอนเทนเนอร์เพื่อจุดประสงค์เดียวในการจัดวางองค์ประกอบวิดเจ็ต UI คอนเทนเนอร์เค้าโครงทำหน้าที่เป็นองค์ประกอบหลักและสามารถมีองค์ประกอบลูกอย่างน้อยหนึ่งรายการ องค์ประกอบลูกทั้งหมดของคอนเทนเนอร์โครงร่างสามารถจัดเรียงตามเทคนิคที่จัดเตรียมโดยคอนเทนเนอร์โครงร่างหลัก

NativeScript รองรับคอนเทนเนอร์เลย์เอาต์หกแบบและมีดังนี้ -

  • คอนเทนเนอร์เค้าโครงแน่นอน

  • คอนเทนเนอร์เค้าโครงท่าเรือ

  • คอนเทนเนอร์เค้าโครงตาราง

  • คอนเทนเนอร์เค้าโครงสแต็ก

  • ห่อเค้าโครงคอนเทนเนอร์

  • คอนเทนเนอร์เค้าโครง FlexBox

ให้เราเรียนรู้แนวคิดคอนเทนเนอร์โครงร่างทั้งหมดโดยละเอียดในบทนี้

เค้าโครงแน่นอน

AbsoluteLayoutcontainer เป็นคอนเทนเนอร์โครงร่างที่ง่ายที่สุดใน NativeScript AbsoluteLayout ไม่บังคับใช้ข้อ จำกัด ใด ๆ กับลูกของมันและจะวางลูกไว้ข้างในโดยใช้ระบบพิกัด 2 มิติที่มีมุมบนซ้ายเป็นจุดเริ่มต้น

AbsoluteLayout ใช้คุณสมบัติสี่ประการของลูก ๆ เพื่อวางตำแหน่งและมีดังนี้ -

top - กำหนดตำแหน่งของเด็กจากจุดเริ่มต้นเคลื่อนลงไปในทิศทาง y

left - กำหนดตำแหน่งของเด็กจากจุดเริ่มต้นที่เคลื่อนที่ไปด้านข้างในทิศทาง x

width - กำหนดความกว้างของเด็ก

height - กำหนดความสูงของเด็ก

ให้เราเพิ่มคอนเทนเนอร์ AbsoluteLayout ในหน้าแรกของแอปพลิเคชันของเราดังต่อไปนี้ -

<ActionBar> 
   <Label text="Home"></Label> 
</ActionBar> 

<AbsoluteLayout width="200" height="300" backgroundColor="blue"> 
   <Label text="Top Left" left="0" top="0" width="100" height="150" backgroundColor="green">
   </Label> 
   <Label text="Top Right" left="100" top="0" width="100" height="150" backgroundColor="blue"></Label> 
   <Label text="Bottom Left" left="0" top="150" width="100" height="150" backgroundColor="orange">
   </Label>
   <Label text="Bottom Right" left="100" top="150" width="100" height="150" backgroundColor="red"></Label> 
</AbsoluteLayout>

เอาต์พุต

ผลลัพธ์ของ AbsoluteLayout มีดังต่อไปนี้ -

DockLayout

Docklayoutส่วนประกอบคอนเทนเนอร์ช่วยให้เด็ก ๆ สามารถเทียบท่าภายในได้ แต่ละด้านของคอนเทนเนอร์ (บนล่างซ้ายขวา) สามารถเชื่อมต่อส่วนประกอบย่อยได้ คอนเทนเนอร์ DockLayout ใช้คุณสมบัติท่าเรือของลูก ๆ เพื่อเชื่อมต่ออย่างถูกต้อง

ค่าที่เป็นไปได้ของคุณสมบัติท่าเรือมีดังนี้ -

top - โครงร่างคอนเทนเนอร์เชื่อมต่อส่วนประกอบลูกที่มุมด้านบน

bottom - โครงร่างคอนเทนเนอร์เชื่อมต่อส่วนประกอบลูกที่มุมด้านล่าง

left - โครงร่างคอนเทนเนอร์เชื่อมต่อส่วนประกอบลูกที่มุมซ้าย

right - โครงร่างคอนเทนเนอร์เชื่อมต่อส่วนประกอบลูกที่มุมขวา

โดยค่าเริ่มต้น, DockLayoutคอนเทนเนอร์เชื่อมต่อกับคอมโพเนนต์ลูกสุดท้าย สามารถแทนที่ได้โดยการตั้งค่าคุณสมบัติ stretchLastChild เป็นศูนย์

ให้เราเพิ่ม DockLayout คอนเทนเนอร์ในหน้าแรกของแอปพลิเคชันของเราดังต่อไปนี้ -

<ActionBar> 
   <Label text="Home"></Label> 
</ActionBar> 
<DockLayout width="250" height="300" backgroundColor="blue" stretchLastChild="false"> 
   <Label text="left" dock="left" width="50" backgroundColor="green"></Label> 
   <Label text="top" dock="top" height="50" backgroundColor="orange"></Label> 
   <Label text="right" dock="right" width="50" backgroundColor="red"></Label< 
   <Label text="bottom" dock="bottom" height="50" 
   backgroundColor="orange"></Label> 
</DockLayout>

เอาต์พุต

ด้านล่างนี้คือเอาต์พุตสำหรับ DockLayout -

GridLayout

ส่วนประกอบคอนเทนเนอร์ GridLayout เป็นคอนเทนเนอร์โครงร่างที่ซับซ้อนและจัดเรียงองค์ประกอบลูกในรูปแบบตารางด้วยแถวและคอลัมน์ โดยค่าเริ่มต้นจะมีหนึ่งแถวและหนึ่งคอลัมน์ มีคุณสมบัติดังต่อไปนี้ -

columns- ใช้เพื่อแสดงความกว้างเริ่มต้นของแต่ละคอลัมน์ที่คั่นด้วย. ค่าที่เป็นไปได้คือตัวเลข * และคำหลักอัตโนมัติ

ที่ไหน

  • ตัวเลขระบุความกว้างของคอลัมน์สัมบูรณ์

  • ระบุความกว้างของคอลัมน์ที่สัมพันธ์กับคอลัมน์อื่น ๆ สามารถนำหน้าด้วยตัวเลขเพื่อระบุจำนวนครั้งที่ความกว้างของคอลัมน์ควรสัมพันธ์กับคอลัมน์อื่น ตัวอย่างเช่น 2 * ระบุความกว้างคอลัมน์ควรเป็น 2 เท่าของความกว้างของคอลัมน์ที่เล็กที่สุด

  • อัตโนมัติระบุความกว้างของคอลัมน์ที่กว้างเท่ากับลูกที่กว้างที่สุด

ตัวอย่างเช่น *, 2 * หมายถึงสองคอลัมน์และวินาทีจะมีขนาดเป็นสองเท่าของคอลัมน์แรก

rows - ใช้เพื่อแสดงความสูงเริ่มต้นของแต่ละแถวที่คั่นด้วย. การแทนค่าจะคล้ายกับคอลัมน์

GridLayout ใช้คุณสมบัติที่ระบุด้านล่างของลูก ๆ ในการจัดวาง -

row - หมายเลขแถว

col - หมายเลขคอลัมน์

rowSpan - จำนวนแถวทั้งหมดที่เนื้อหาย่อยครอบคลุมภายในเค้าโครง

colSpan - จำนวนคอลัมน์ทั้งหมดที่เนื้อหาย่อยครอบคลุมภายในเค้าโครง

ให้เราเพิ่มคอนเทนเนอร์ GridLayout ในหน้าแรกของแอปพลิเคชันของเราดังต่อไปนี้ -

<ActionBar> 
   <Label text="Home"></Label> 
</ActionBar> 
<GridLayout columns="50, auto, *" rows="50, auto, *" width="210" height="210"
   backgroundColor="blue"> 
   <Label text="Row: 0; Column 0" row="0" col="0" backgroundColor="green"></Label> 
   <Label text="Row: 0; Column 1" row="0" col="1" colSpan="1" backgroundColor="brown"></Label> 
   <Label text="Row: 1; Column 0" row="1" col="0" rowSpan="1" backgroundColor="red"></Label> 
   <Label text="Row: 1; Column 1" row="1" col="1" backgroundColor="orange"></Label> 
</GridLayout>

เอาต์พุต

ด้านล่างนี้คือผลลัพธ์สำหรับ GridLayout -

StackLayout

StackLayout จัดเรียงลูกของมันในเส้นมิติเดียวในแนวนอนหรือแนวตั้ง สามารถปรับขนาดตามพื้นที่ในเค้าโครงโดยใช้ตัวเลือกเค้าโครง มีคุณสมบัติการวางแนวที่สามารถใช้เพื่อระบุทิศทางแนวนอนหรือแนวตั้ง

ให้เราเพิ่มคอนเทนเนอร์ StackLayout ในหน้าแรกของแอปพลิเคชันของเราดังต่อไปนี้ -

<ActionBar> 
   <Label text="Home"></Label> 
</ActionBar> 
<StackLayout orientation="vertical" width="200" height="200" backgroundColor="blue"> 
   <Label text="Label1" width="50" height="50" backgroundColor="green"></Label> 
   <Label text="Label2" width="50" height="50" backgroundColor="brown"></Label> 
   <Label text="Label3" width="50" height="50" backgroundColor="red"></Label> 
   <Label text="Label4" width="50" height="50" backgroundColor="orange"></Label> 
</StackLayout>

เอาต์พุต

ผลลัพธ์สำหรับ StackLayout เป็นดังที่แสดงด้านล่าง -

WrapLayout

WrapLayout ใช้เพื่อรวมเนื้อหาในแถวหรือคอลัมน์ใหม่

มีคุณสมบัติสามประการดังต่อไปนี้ -

orientation - แสดงทั้งในแนวนอนหรือแนวตั้ง

itemWidth - ความกว้างของเค้าโครงสำหรับเด็กแต่ละคน

itemHeight - ความสูงของเค้าโครงสำหรับเด็กแต่ละคน

ให้เราเพิ่มคอนเทนเนอร์ WrapLayout ในหน้าแรกของแอปพลิเคชันของเราดังต่อไปนี้ -

<ActionBar> 
   <Label text="Home"></Label> 
</ActionBar> <WrapLayout orientation="horizontal" width="200" height="200" backgroundColor="blue">
   <Label text="Label1" width="70" height="70" backgroundColor="green"></Label> 
   <Label text="Label2" width="70" height="70" backgroundColor="brown"></Label 
   <Label text="Label3" width="70" height="70" backgroundColor="red"></Label> 
   <Label text="Label4" width="70" height="70" backgroundColor="orange"></Label> 
</WrapLayout>

เอาต์พุต

เค้าโครง Flexbox

ส่วนประกอบคอนเทนเนอร์ FlexboxLayout เป็นหนึ่งในคอนเทนเนอร์โครงร่างขั้นสูง มีตัวเลือกในการแสดงเค้าโครงที่เรียบง่ายไปจนถึงเค้าโครงที่ซับซ้อนและซับซ้อนมาก มันขึ้นอยู่กับ CSS Flexbox

ส่วนประกอบ FlexboxLayout มีคุณสมบัติมากมายและมีดังนี้ -

flexDirection

แสดงถึงทิศทางในการจัดเรียงส่วนประกอบย่อย ค่าที่เป็นไปได้ของ flexDirection มีดังนี้ -

row - ส่วนประกอบของเด็กจัดเรียงเคียงข้างกัน

row-reverse - ส่วนประกอบลูกเรียงเคียงข้างกัน แต่ในทิศทางกลับกัน

column - ส่วนประกอบย่อยถูกจัดเรียงไว้ด้านล่างอีกชิ้นหนึ่ง

column-reverse - ส่วนประกอบย่อยถูกจัดเรียงไว้ด้านล่างอีกชิ้นหนึ่ง แต่อยู่ในทิศทางตรงกันข้าม

ให้เราเพิ่มคอนเทนเนอร์ FlexLayout ในหน้าแรกของแอปพลิเคชันของเราดังต่อไปนี้ -

<ActionBar> 
   <Label text="Home"></Label> 
</ActionBar> 
<FlexboxLayout flexDirection="row"> 
   <Label text="First Item" backgroundColor="red"></Label> 
   <Label text="Second Item" backgroundColor="green"></Label> 
   <Label text="Third Item" backgroundColor="red"></Label> 
   <Label text="Fourth Item" backgroundColor="green"></Label> 
   <Label text="Fifth Item" backgroundColor="red"></Label> 
</FlexboxLayout>

เอาต์พุต

ด้านล่างนี้คือผลลัพธ์ของ FlexLayout - Row -

ตอนนี้ให้เราเปลี่ยนค่า flexDirection จาก row เป็น row-reverse และตรวจสอบว่ามีผลต่อเลย์เอาต์อย่างไร

<ActionBar> 
   <Label text="Home"></Label> 
</ActionBar> <FlexboxLayout flexDirection="row-reverse"> 
   <Label text="First Item" backgroundColor="red"></Label> 
   <Label text="Second Item" backgroundColor="green"></Label> 
   <Label text="Third Item" backgroundColor="red"></Label> 
   <Label text="Fourth Item" backgroundColor="green"></Label> 
   <Label text="Fifth Item" backgroundColor="red"></Label> 
</FlexboxLayout>

เอาต์พุต

ด้านล่างนี้คือผลลัพธ์ของ Flex Layout - Row Reverse -

ให้เราเปลี่ยนค่า flexDirection จาก row-reverse เป็น column และตรวจสอบว่ามีผลต่อเลย์เอาต์อย่างไร

<ActionBar> 
   <Label text="Home"></Label> 
</ActionBar> 
<FlexboxLayout flexDirection="column"> 
   <Label text="First Item" backgroundColor="red"></Label> 
   <Label text="Second Item" backgroundColor="green"></Label> 
   <Label text="Third Item" backgroundColor="red"></Label> 
   <Label text="Fourth Item" backgroundColor="green"></Label> 
   <Label text="Fifth Item" backgroundColor="red"></Label> 
</FlexboxLayout>

เอาต์พุต

ผลลัพธ์สำหรับ FlexLayout - คอลัมน์ได้รับด้านล่าง -

ให้เราเปลี่ยนค่า flexDirection จากคอลัมน์เป็นคอลัมน์ย้อนกลับและตรวจสอบว่ามีผลต่อเลย์เอาต์อย่างไร

<ActionBar> 
   <Label text="Home"></Label> 
</ActionBar> 
<FlexboxLayout flexDirection="column-reverse"> 
   <Label text="First Item" backgroundColor="red"></Label> 
   <Label text="Second Item" backgroundColor="green"></Label> 
   <Label text="Third Item" backgroundColor="red"></Label> 
   <Label text="Fourth Item" backgroundColor="green"></Label> 
   <Label text="Fifth Item" backgroundColor="red"></Label> 
</FlexboxLayout>

เอาต์พุต

ด้านล่างนี้คือผลลัพธ์ของ FlexLayout - Column Reverse -

flexWrap

แสดงว่าคอมโพเนนต์ลูกจะแสดงผลในแถว / คอลัมน์เดียวหรือไหลเป็นหลายแถวโดยการห่อตามทิศทางที่กำหนดโดย flexDirection

ค่าที่เป็นไปได้มีดังนี้ -

wrap - ห่อส่วนประกอบลูกถ้าไม่มีที่ว่างในทิศทางที่กำหนด (flexDirection)

wrap-reverse - เหมือนกับการห่อยกเว้นการไหลของส่วนประกอบในทิศทางตรงกันข้าม

ให้เราเพิ่มคุณสมบัติ flexWrap แล้วตั้งค่าเป็น wrap เพิ่มลูกอีกสามคนตามที่ระบุด้านล่าง -

<ActionBar> 
   <Label text="Home"></Label> 
&tl;/ActionBar> 
<FlexboxLayout flexDirection="row" flexWrap="wrap"> 
   <Label text="First Item" backgroundColor="red"></Label> 
   <Label text="Second Item" backgroundColor="green"></Label> 
   <Label text="Third Item" backgroundColor="red"></Label> 
   <Label text="Fourth Item" backgroundColor="green"></Label> 
   <Label text="Fifth Item" backgroundColor="red"></Label>
   <Label text="Sixth Item" backgroundColor="green"></Label> 
   <Label text="Seventh Item" backgroundColor="red"></Label> 
   <Label text="Eighth Item" backgroundColor="green"></Label> 
</FlexboxLayout>

เอาต์พุต

ด้านล่างนี้คือผลลัพธ์สำหรับ flexWrap -

JustifyContent

มันแสดงถึงการจัดเรียงองค์ประกอบย่อยโดยเคารพซึ่งกันและกันและโครงสร้างโดยรวม มีคุณสมบัติสามประการตามที่ระบุไว้ด้านล่าง -

flex-end - บรรจุส่วนประกอบลูกไว้ที่ท้ายบรรทัด

space-between - บรรจุองค์ประกอบลูกโดยกระจายอย่างสม่ำเสมอในบรรทัด

space-around - คล้ายกับช่องว่างระหว่างยกเว้นจะบรรจุองค์ประกอบลูกโดยกระจายอย่างสม่ำเสมอในแนวเดียวกันและพื้นที่รอบ ๆ เท่า ๆ กัน

ให้เราเพิ่ม justifyContent ด้วยและตรวจสอบว่ามันทำงานอย่างไร -

<ActionBar> 
   <Label text="Home"></Label>
</ActionBar> 
<FlexboxLayout flexDirection="row" flexWrap="wrap" justifyContent="space-around"> 
   <Label text="First Item" backgroundColor="red"></Label> 
   <Label text="Second Item" backgroundColor="green"></Label> 
   <Label text="Third Item" backgroundColor="red"></Label> 
   <Label text="Fourth Item" backgroundColor="green"></Label> 
   <Label text="Fifth Item" backgroundColor="red"></Label> 
   <Label text="Sixth Item" backgroundColor="green"></Label> 
   <Label text="Seventh Item" backgroundColor="red"></Label> 
   <Label text="Eighth Item" backgroundColor="green"></Label> 
</FlexboxLayout>

เอาต์พุต

ด้านล่างนี้คือผลลัพธ์ของ Flex Layout - JustifyContent -

คอนเทนเนอร์ FlexLayout มีคุณสมบัติอีกสองอย่างสำหรับชายด์ในการระบุลำดับและความสามารถในการย่อขนาด มีดังนี้ -

order - กำหนดลำดับที่จะแสดงผลลูกของคอนเทนเนอร์ FlexLayout

flexShrink - กำหนดความสามารถของเด็กที่จะลดระดับเป็น 0