Row ใน Jetpack Compose: คืออะไร คุณสมบัติ composable และวิธีการทำงาน

ผู้แต่ง: IT Sectr เผยแพร่เมื่อ: 2026-06-28 เวลาอ่าน: 10 นาที

Row คือฟังก์ชัน composable ใน Jetpack Compose สำหรับวางองค์ประกอบย่อยในแถวแนวนอน แตกต่างจาก Column ตรงที่ Row จัดเรียงองค์ประกอบจากซ้ายไปขวาและรองรับการกำหนดค่าเค้าโครงผ่านพารามิเตอร์ horizontalArrangement และ verticalAlignment ตาม Google Android Documentation, 2025 Row เป็นหนึ่งในสามคอนเทนเนอร์พื้นฐานของ Compose ร่วมกับ Column และ Box และใช้สำหรับสร้างโครงสร้างอินเทอร์เฟซแนวนอน: แถวปุ่ม ฟิลด์ป้อนข้อมูล และไอคอนพร้อมข้อความ

ประเด็นสำคัญ

  • Row คือคอนเทนเนอร์แนวนอนของ Jetpack Compose ที่วางองค์ประกอบ composable ย่อยในบรรทัดเดียวจากซ้ายไปขวา
  • horizontalArrangement ควบคุมการกระจายองค์ประกอบในแนวนอน: เท่าๆ กัน มีระยะห่าง หรือที่ท้ายคอนเทนเนอร์
  • verticalAlignment จัดแนวองค์ประกอบในแนวตั้งสัมพันธ์กับคอนเทนเนอร์: บน กลาง หรือล่าง
  • Modifier.weight ช่วยให้กระจายพื้นที่ว่างระหว่างองค์ประกอบ Row ตามสัดส่วนน้ำหนักที่ระบุ
  • Row มีประสิทธิภาพสำหรับการสร้างแถวปุ่ม รายการไอคอน ฟิลด์ป้อนข้อมูล และแถบเครื่องมือแนวนอนในอินเทอร์เฟซมือถือ

Row ใน Jetpack Compose คืออะไร

Row คือฟังก์ชัน composable ที่วางองค์ประกอบย่อยในลำดับแนวนอน ในลำดับชั้นเค้าโครงของ Compose Row อยู่ในตำแหน่งคอนเทนเนอร์พื้นฐานร่วมกับ Column และ Box

Row ไม่ต้องการการระบุขนาด — มันปรับตัวตามเนื้อหาโดยอัตโนมัติ ความกว้างของ Row เท่ากับผลรวมของความกว้างขององค์ประกอบย่อยรวมถึงการเติม เว้นแต่จะมีการระบุ Modifier.fillMaxWidth หรือขนาดคงที่

องค์ประกอบย่อยของ Row สามารถมีตัวปรับแต่งของตัวเองที่ส่งผลต่อตำแหน่งภายในคอนเทนเนอร์ ตัวอย่างเช่น Modifier.weight ช่วยให้องค์ประกอบ占用พื้นที่ตามสัดส่วนของพื้นที่ว่าง

ตาม Android Developers Blog, 2024 Row ประมวลผลองค์ประกอบย่อยตามลำดับ โดยคำนวณขนาดตามกฎการวัดของ Compose: ขั้นแรกวัดองค์ประกอบที่ไม่มี weight จากนั้นพื้นที่ที่เหลือจะถูกกระจายระหว่างองค์ประกอบที่มี weight

ไวยากรณ์และลายเซ็นพื้นฐานของ Row

ลายเซ็นพื้นฐานของ Row ประกอบด้วยพารามิเตอร์ modifier, horizontalArrangement และ verticalAlignment องค์ประกอบย่อยทั้งหมดจะถูกส่งในบล็อกแลมบ์ดา content สุดท้าย

kotlin
@Composable
fun RowExample() {
    Row(
        modifier = Modifier.fillMaxWidth().padding(16.dp),
        horizontalArrangement = Arrangement.SpaceEvenly,
        verticalAlignment = Alignment.CenterVertically
    ) {
        Text(text = "หนึ่ง")
        Text(text = "สอง")
        Text(text = "สาม")
    }
}

คุณสมบัติของ Row: horizontalArrangement และ verticalAlignment

พารามิเตอร์ horizontalArrangement กำหนดว่าองค์ประกอบย่อยจะกระจายไปตามแกนแนวนอนภายใน Row อย่างไร ค่าที่มีได้แก่ Start, End, Center, SpaceBetween, SpaceAround และ SpaceEvenly จากคลาส Arrangement

Arrangement.Start วางองค์ประกอบที่จุดเริ่มต้นของคอนเทนเนอร์ Arrangement.End — ที่ท้าย และ Arrangement.Center — ที่กึ่งกลาง ค่าเหล่านี้ทำงานคล้ายกับคุณสมบัติ justify-content ใน CSS Flexbox

Arrangement.SpaceBetween กระจายองค์ประกอบอย่างเท่าเทียม โดยวางองค์ประกอบแรกที่จุดเริ่มต้น องค์ประกอบสุดท้ายที่จุดสิ้นสุด และส่วนที่เหลือมีระยะห่างเท่ากันระหว่างกัน ตาม Material Design Guidelines, 2025 SpaceBetween เหมาะสมที่สุดสำหรับแถบเครื่องมือและแถวนำทาง

พารามิเตอร์ verticalAlignment จัดแนวองค์ประกอบในแนวตั้ง ค่าที่มีได้แก่ Alignment.Top, Alignment.CenterVertically และ Alignment.Bottom คุณสมบัตินี้มีประโยชน์เมื่อองค์ประกอบ Row มีความสูงต่างกัน — ตัวอย่างเช่น ไอคอนข้างข้อความหลายบรรทัด

ตารางค่า Arrangement

ค่าคำอธิบายการใช้งาน
Startองค์ประกอบถูกชิดไปที่จุดเริ่มต้นของ Rowแถวชิดซ้าย
Centerองค์ประกอบอยู่กึ่งกลางคอนเทนเนอร์เมนูแนวนอน ส่วนหัว
SpaceBetweenเท่าเทียมโดยอันแรกที่เริ่ม อันสุดท้ายที่สิ้นสุดแถบเครื่องมือ การนำทาง
SpaceEvenlyระยะห่างเท่ากันระหว่างองค์ประกอบและที่ขอบแถวปุ่ม กริดที่สม่ำเสมอ
SpaceAroundระยะห่างเท่ากันระหว่างองค์ประกอบ ครึ่งระยะที่ขอบม้าหมุน แกลเลอรีไอคอน

การกระจายพื้นที่ด้วย Modifier.weight

Modifier.weight คือตัวปรับแต่งที่ใช้ได้เฉพาะภายใน Row และ Column เท่านั้น ซึ่งกระจายพื้นที่ว่างระหว่างองค์ประกอบย่อยตามสัดส่วนของค่าที่ระบุ หากองค์ประกอบหนึ่งมีน้ำหนัก 1.0f และอีกองค์ประกอบมี 2.0f องค์ประกอบที่สองจะใช้พื้นที่เป็นสองเท่า

องค์ประกอบที่ไม่มี weight จะใช้พื้นที่ที่จำเป็นสำหรับเนื้อหา พื้นที่ที่เหลือจะถูกกระจายระหว่างองค์ประกอบที่มี weight ตามสัดส่วนน้ำหนัก พฤติกรรมนี้คล้ายกับคุณสมบัติ flex-grow ใน CSS Flexbox

ตาม Android Developer Documentation, 2025 weight ทำงานเฉพาะภายใน Row, Column และ BoxWithConstraints เมื่อใช้ weight ใน Row องค์ประกอบย่อยทั้งหมดจะถูกวัดในสองรอบ: รอบแรกองค์ประกอบที่ไม่มี weight จากนั้นองค์ประกอบที่มี weight

kotlin
@Composable
fun WeightExample() {
    Row(
        modifier = Modifier.fillMaxWidth(),
        horizontalArrangement = Arrangement.Start
    ) {
        Text(
            text = "ซ้าย",
            modifier = Modifier.weight(1.0f)
        )
        Text(text = "ขวา")
    }
}

ตัวอย่างโค้ดกับ Row

ตัวอย่างแรกสาธิต Row ด้วยไอคอนและข้อความ — สถานการณ์ทั่วไปสำหรับรายชื่อผู้ติดต่อหรือการตั้งค่า Icon และ Text ถูกห่อใน Row โดยมี verticalAlignment อยู่กึ่งกลาง

kotlin
@Composable
fun IconWithText() {
    Row(
        verticalAlignment = Alignment.CenterVertically,
        modifier = Modifier.padding(8.dp)
    ) {
        Icon(
            imageVector = Icons.Default.Favorite,
            contentDescription = "Favorite"
        )
        Spacer(modifier = Modifier.width(8.dp))
        Text(text = "เพิ่มในรายการโปรด")
    }
}

ตัวอย่างที่สองแสดง Row ด้วยปุ่มและการกระจายเท่าเทียม SpaceEvenly รับประกันระยะห่างเท่ากันระหว่างปุ่มทั้งหมดและขอบของคอนเทนเนอร์

kotlin
@Composable
fun ButtonRow() {
    Row(
        modifier = Modifier.fillMaxWidth().padding(16.dp),
        horizontalArrangement = Arrangement.SpaceEvenly
    ) {
        Button(onClick = {}) { Text("ยกเลิก") }
        Button(onClick = {}) { Text("บันทึก") }
    }
}

ตัวอย่างที่สาม — Row ภายใน Card สำหรับแสดงคะแนน Row ที่ซ้อนกันด้วย Modifier.weight ช่วยให้ดาวคะแนนและค่าตัวเลขใช้พื้นที่คงที่

kotlin
@Composable
fun RatingRow(rating: Float) {
    Row(
        verticalAlignment = Alignment.CenterVertically
    ) {
        Text(
            text = "คะแนน:",
            modifier = Modifier.weight(1.0f)
        )
        Text(text = "$rating / 5.0")
    }
}

คุณสมบัติของ Row ในเค้าโครงแบบปรับตัว

Row ต้องการการควบคุมความกว้างในเค้าโครงแบบปรับตัว หากเนื้อหาของ Row เกินความกว้างหน้าจอที่มี องค์ประกอบอาจล้นขอบเขตคอนเทนเนอร์ เพื่อป้องกันนี้ ให้ใช้ Modifier.horizontalScroll หรือเปลี่ยนเป็น Column

เมื่อรวม Row กับ Modifier.weight สิ่งสำคัญคือต้องตั้งค่า fillMaxWidth ให้กับ Row หลัก — มิฉะนั้น weight จะกระจายพื้นที่ที่ไม่มีอยู่ ตาม Material Design Guidelines, 2025 Row ที่มี weight โดยไม่มี fillMaxWidth ถือเป็นการกำหนดค่าที่ไม่ถูกต้อง

สำหรับอินเทอร์เฟซแบบปรับตัว แนะนำให้รวม Row กับ Box หรือใช้ Arrangement.SpaceBetween สำหรับการกระจายองค์ประกอบอัตโนมัติบนขนาดหน้าจอที่แตกต่างกัน ซึ่งให้ความยืดหยุ่นโดยไม่ต้องใช้ Media Queries

  • Modifier.horizontalScroll — เพิ่มการเลื่อนเมื่อ Row ล้น
  • Modifier.weight — กระจายพื้นที่ตามสัดส่วน
  • Arrangement.SpaceBetween — การกระจายแบบปรับตัวพร้อมการยึดที่ขอบ

คำถามที่พบบ่อย

Row แตกต่างจาก Column ใน Jetpack Compose อย่างไร?

Row วางองค์ประกอบในแนวนอน (จากซ้ายไปขวา) ในขณะที่ Column วางในแนวตั้ง (จากบนลงล่าง) Row แทนที่ LinearLayout แนวนอนจากแนวทาง View แบบเก่า และ Column แทนที่ LinearLayout แนวตั้ง

วิธีทำให้ Row เลื่อนได้?

เพิ่มตัวปรับแต่ง Modifier.horizontalScroll ให้กับ Row สำหรับรายการขนาดใหญ่ที่ต้องการโหลดแบบ Lazy ให้ใช้ LazyRow — มันจะแสดงเฉพาะองค์ประกอบที่มองเห็นและนำกลับมาใช้ใหม่ระหว่างการเลื่อน

สามารถซ้อน Row ภายใน Row อื่นได้หรือไม่?

ได้ Row สามารถซ้อนภายใน Row, Column หรือ Box อื่นได้ เมื่อซ้อน ให้จำไว้ว่า Row ด้านในจะได้รับความกว้างจากคอนเทนเนอร์หลัก และหากจำเป็น ให้ตั้งค่า fillMaxWidth สำหรับแต่ละระดับ

Modifier.weight ทำอะไรใน Row?

Modifier.weight กระจายพื้นที่ที่เหลือใน Row ระหว่างองค์ประกอบย่อยตามสัดส่วนน้ำหนักที่ระบุ องค์ประกอบที่มีน้ำหนัก 2.0f จะกว้างเป็นสองเท่าขององค์ประกอบที่มีน้ำหนัก 1.0f Weight ทำงานเฉพาะภายใน Row และ Column

วิธีจัดกึ่งกลางองค์ประกอบ Row ในแนวตั้ง?

ใช้พารามิเตอร์ verticalAlignment = Alignment.CenterVertically เมื่อสร้าง Row ซึ่งจะจัดแนวองค์ประกอบย่อยทั้งหมดตามแกนตั้งโดยไม่คำนึงถึงความสูง

สรุป

  • Row คือคอนเทนเนอร์แนวนอนของ Compose สำหรับวางองค์ประกอบในแถวจากซ้ายไปขวาพร้อมการจัดเรียงและจัดแนวที่ปรับแต่งได้
  • horizontalArrangement ควบคุมการกระจายแนวนอนขององค์ประกอบ: Start, Center, End, SpaceBetween, SpaceEvenly และ SpaceAround
  • verticalAlignment จัดแนวองค์ประกอบในแนวตั้งผ่าน Alignment.Top, CenterVertically หรือ Bottom
  • Modifier.weight กระจายพื้นที่ว่างระหว่างองค์ประกอบตามสัดส่วนน้ำหนักที่ระบุ คล้ายกับ flex-grow ใน CSS
  • Row รองรับการซ้อน การเลื่อนผ่าน Modifier.horizontalScroll และทำงานร่วมกับคอนเทนเนอร์ Compose อื่นๆ
  • ในเค้าโครงแบบปรับตัว การตั้งค่า Modifier.fillMaxWidth สำหรับ Row ที่มี weight เป็นสิ่งสำคัญ มิฉะนั้นองค์ประกอบจะกระจายพื้นที่ไม่ถูกต้อง
  • สำหรับรายการแนวนอนที่มีองค์ประกอบจำนวนมาก ใช้ LazyRow แทน Row เพื่อประสิทธิภาพที่ดีที่สุด

เราจะพัฒนาแอปพลิเคชันบนมือถือแบบครบวงจร

IT Sectr สร้างแอปพลิเคชัน iOS และ Android สำหรับสตาร์ทอัพและธุรกิจตั้งแต่ปี 2017 เราจะให้คำแนะนำและเสนอวิธีแก้ปัญหาที่ดีที่สุดแก่คุณ

ปรึกษาโครงการ

อ่านเพิ่มเติม