Layout Editor — เครื่องมือแก้ไข XML เลย์เอาต์แบบภาพใน Android Studio ที่ช่วยให้สร้างอินเทอร์เฟซของแอป Android ได้โดยไม่ต้องเขียนโค้ดด้วยตนเอง มาทำความเข้าใจว่ามันคืออะไร วิธีทำงานกับ ConstraintLayout และ LinearLayout การใช้จานสีส่วนประกอบ และการตั้งค่าแอตทริบิวต์ผ่าน Properties Panel
ประเด็นสำคัญ
Layout Editor — เครื่องมือในตัวของ Android Studio สำหรับออกแบบส่วนติดต่อผู้ใช้ของแอป Android แบบภาพ มันจะเปิดขึ้นเมื่อดับเบิลคลิกที่ไฟล์ XML เลย์เอาต์ในโฟลเดอร์ res/layout/ และสามารถเข้าถึงได้ผ่านแผงด้านล่างสำหรับสลับระหว่างแท็บ Code, Design และ Split นักพัฒนาสามารถลากส่วนประกอบจากจานสีไปยังผืนผ้าใบ ตั้งค่าคุณสมบัติ และดูการเปลี่ยนแปลงแบบเรียลไทม์
เครื่องมือรองรับ สองโหมด การแสดงผล: Design (ผืนผ้าใบแบบภาพพร้อมการแสดงวิดเจ็ตจริง) และ Blueprint (การแสดงแผนผังพร้อม constraints และขอบเขต) โหมด Split จะแสดงโค้ด XML และผืนผ้าใบแบบภาพพร้อมกัน การสลับระหว่างโหมดเหล่านี้ทำได้ด้วยปุ่มที่มุมซ้ายบนของตัวแก้ไข
Layout Editor จะ สร้างโค้ด XML โดยอัตโนมัติ สำหรับทุกการกระทำของผู้ใช้: การเพิ่มองค์ประกอบ การตั้งค่าระยะขอบ การสร้าง constraint ช่วยให้นักพัฒนาไม่ต้องจำแอตทริบิวต์ XML มากมายและสามารถมุ่งเน้นไปที่ผลลัพธ์ที่มองเห็นได้ โค้ดที่สร้างขึ้นสามารถแก้ไขด้วยตนเองได้ตลอดเวลาบนแท็บ Code
| โหมด | คำอธิบาย | ปุ่มลัด |
|---|---|---|
| Design | ผืนผ้าใบแบบภาพพร้อมส่วนประกอบจริง | Shift + D |
| Blueprint | แผนผังพร้อม constraints และขอบเขต | Shift + B |
| Split | โค้ด XML และผืนผ้าใบพร้อมกัน | Shift + S |
อินเทอร์เฟซของ Layout Editor แบ่งออกเป็น สี่โซน: Palette (จานสีส่วนประกอบ), Component Tree (โครงสร้างส่วนประกอบ), Design Surface (ผืนผ้าใบสำหรับออกแบบ) และ Properties Panel (แผงคุณสมบัติ) Palette มีวิดเจ็ตทั้งหมดที่มีใน Android SDK ซึ่งจัดกลุ่มตามหมวดหมู่: Widgets, Text, Buttons, Containers และอื่นๆ Component Tree แสดงลำดับชั้นของเลย์เอาต์ในรูปแบบต้นไม้ ทำให้สามารถลากองค์ประกอบระหว่างคอนเทนเนอร์ได้
Design Surface — ส่วนกลางของตัวแก้ไขที่แสดงเลย์เอาต์ บนผืนผ้าใบคุณสามารถเลือกองค์ประกอบ ย้ายมัน เปลี่ยนขนาด และสร้าง constraints ที่ด้านล่างของผืนผ้าใบมีสวิตช์สำหรับเลือกอุปกรณ์และการวางแนวเพื่อแสดงตัวอย่างเลย์เอาต์บนหน้าจอต่างๆ Layout Editor รองรับการแสดงตัวอย่างบนอุปกรณ์เสมือนหลายรุ่น เช่น Nexus, Pixel และ Samsung
Properties Panel แสดงแอตทริบิวต์ขององค์ประกอบที่เลือก: layout_width, layout_height, ระยะขอบ (margin), ระยะห่างภายใน (padding), การจัดตำแหน่ง และแอตทริบิวต์เฉพาะทั้งหมด เช่น textSize สำหรับ TextView การเปลี่ยนแปลงทุกครั้งใน Properties Panel จะสะท้อนบนผืนผ้าใบทันทีและสร้างโค้ด XML ที่สอดคล้องกัน
ที่มุมซ้ายบนของตัวแก้ไขมี ปุ่มควบคุม: การเลือกโหมดการแสดงผล การเปิดใช้งานการเชื่อมต่อ constraints อัตโนมัติ (Autoconnect) การแสดง constraints เป็นเส้น และการสลับระหว่างอุปกรณ์เสมือน ปุ่ม «Device for Preview» ช่วยให้เลือกสมาร์ทโฟน แท็บเล็ต หรือ Android TV เพื่อตรวจสอบความสามารถในการปรับเปลี่ยน
ConstraintLayout — เลย์เอาต์หลักที่ Google แนะนำสำหรับโปรเจกต์ Android ใหม่ทั้งหมด แตกต่างจาก LinearLayout ที่ซ้อนกัน ConstraintLayout จะสร้างลำดับชั้นแบบแบนราบที่แต่ละองค์ประกอบเชื่อมต่อกับพ่อแม่ องค์ประกอบอื่น หรือเส้นนำ (guidelines) ซึ่งช่วยลดความลึกของการซ้อนและเพิ่มประสิทธิภาพการเรนเดอร์
แต่ละองค์ประกอบใน ConstraintLayout มี constraints ด้านข้าง: app:layout_constraintStart_toStartOf, app:layout_constraintEnd_toEndOf, app:layout_constraintTop_toTopOf, app:layout_constraintBottom_toBottomOf Constraints สามารถเชื่อมต่อกับพ่อแม่ (parent) หรือกับ ID ขององค์ประกอบอื่น เทมเพลต XML พื้นฐานมีลักษณะดังนี้:
ในตัวอย่างนี้ TextView ถูกจัดกึ่งกลางทั้งสี่ด้านสัมพันธ์กับพ่อแม่ ขนาด 0dp (match_constraint) หมายถึงความกว้างจะยืดจาก constraint ด้านซ้ายไปด้านขวา วิธีการนี้ช่วยให้สร้างเลย์เอาต์ที่ปรับเปลี่ยนได้โดยไม่ต้องใช้ขนาดคงที่
ConstraintLayout ยังรองรับ Bias — การเลื่อนจุดศูนย์กลางขององค์ประกอบ แอตทริบิวต์ layout_constraintHorizontal_bias และ layout_constraintVertical_bias รับค่าตั้งแต่ 0 ถึง 1 โดยที่ 0.5 คือกึ่งกลาง 0 คือชิดจุดเริ่มต้น 1 คือชิดจุดสิ้นสุด Bias ช่วยให้วางตำแหน่งองค์ประกอบระหว่างสอง constraints ได้อย่างแม่นยำ
ความสามารถเพิ่มเติมของ ConstraintLayout: Guidelines (เส้นนำในหน่วยเปอร์เซ็นต์หรือ dp), Barriers (สิ่งกีดขวางที่รวมหลายองค์ประกอบ) และ Chains (ห่วงโซ่ขององค์ประกอบที่มีการกระจายพื้นที่) องค์ประกอบทั้งหมดนี้สร้างได้โดยตรงใน Layout Editor ผ่านเมนูบริบทบนผืนผ้าใบ
LinearLayout — คอนเทนเนอร์ที่จัดเรียงองค์ประกอบลูกตามลำดับในแนวนอน (android:orientation="horizontal") หรือแนวตั้ง (android:orientation="vertical") เป็นเลย์เอาต์ที่เข้าใจง่ายที่สุด แต่สร้างลำดับชั้นแบบซ้อนเมื่อใช้กับเลย์เอาต์ที่ซับซ้อน ซึ่งอาจลดประสิทธิภาพการทำงาน
แอตทริบิวต์หลักของ LinearLayout คือ weight (android:layout_weight) มันช่วยกระจายพื้นที่ว่างระหว่างองค์ประกอบตามสัดส่วนของค่าที่กำหนด หากตั้งค่า weight="1" ให้กับปุ่มสองปุ่ม พวกมันจะกินพื้นที่ความกว้างเท่ากัน องค์ประกอบที่มี weight="2" จะได้พื้นที่มากกว่าองค์ประกอบที่มี weight="1" สองเท่า ตัวอย่าง XML กับ LinearLayout:
ในตัวอย่างนี้ EditText ได้รับ layout_weight="1" และกินพื้นที่ว่างทั้งหมดระหว่าง labelName และ btnSubmit layout_width="0dp" ระบุว่าความกว้างของ EditText ถูกกำหนดโดย weight ทั้งหมด หากไม่มี weight คุณจะต้องตั้งค่าความกว้างคงที่ซึ่งไม่ปรับตามหน้าจอต่างๆ
คุณสมบัติสำคัญของ LinearLayout: android:gravity ควบคุมการจัดตำแหน่งเนื้อหาภายในคอนเทนเนอร์ ในขณะที่ android:layout_gravity — การจัดตำแหน่งของคอนเทนเนอร์เองสัมพันธ์กับพ่อแม่ LinearLayout ที่ซ้อนกันเป็นสาเหตุทั่วไปของการซ้อนลึก ดังนั้น Google แนะนำให้แทนที่โครงสร้างดังกล่าวด้วย ConstraintLayout
ทุกเลย์เอาต์ Android คือ ไฟล์ XML ในโฟลเดอร์ res/layout/ Layout Editor จะสร้างไฟล์นี้โดยอัตโนมัติ แต่การเข้าใจโครงสร้างของมันจำเป็นสำหรับการเพิ่มประสิทธิภาพด้วยตนเอง องค์ประกอบรากกำหนดประเภทของคอนเทนเนอร์ (ConstraintLayout, LinearLayout, FrameLayout) ซึ่งภายในจะวางวิดเจ็ตลูก
เทมเพลต XML พื้นฐานกับ ConstraintLayout ประกอบด้วยการประกาศ namespace xmlns:android และ xmlns:app namespace app ใช้สำหรับแอตทริบิวต์ของไลบรารี ConstraintLayout เช่น layout_constraintStart_toStartOf แต่ละองค์ประกอบควรกำหนด android:id เพื่อใช้อ้างอิงจากองค์ประกอบอื่นและจากโค้ดของ Activity หรือ Fragment
ตัวอย่างส่วนของเลย์เอาต์ที่มีหลายองค์ประกอบและ constraints:
ในเลย์เอาต์นี้ ImageView เชื่อมต่อกับด้านบนของพ่อแม่และจัดกึ่งกลางแนวนอน TextView เชื่อมต่อกับขอบล่างของ ImageView (Top_toBottomOf) Button วางอยู่ใต้ TextView ห่วงโซ่ของ constraints นี้สร้างโครงสร้างแบบเรียงลำดับโดยไม่มี LinearLayout ที่ซ้อนกัน
Layout Editor ช่วยให้ สลับ ระหว่างการแสดงแบบภาพและแบบข้อความผ่านแท็บ Design / Code / Split ในโหมด Split การเปลี่ยนแปลงใน XML จะสะท้อนบนผืนผ้าใบทันทีและในทางกลับกัน สะดวกเป็นพิเศษสำหรับการปรับแต่งแอตทริบิวต์ที่ไม่มีตัวควบคุมแบบภาพบนผืนผ้าใบ
Palette (จานสี) — แผงด้านซ้ายของ Layout Editor ที่มีส่วนประกอบ UI ทั้งหมด: TextView, Button, ImageView, EditText, ProgressBar, RecyclerView และอื่นๆ ส่วนประกอบถูกจัดกลุ่มตามหมวดหมู่: Widgets, Text, Buttons, Containers, Transitions, Advanced ในการเพิ่มส่วนประกอบบนผืนผ้าใบ เพียงลากมันจากจานสีไปยัง Design Surface
Properties Panel (แผงด้านขวา) แสดงแอตทริบิวต์ทั้งหมดขององค์ประกอบที่เลือก แผงแบ่งออกเป็นส่วน: Id (ตัวระบุ), Layout (ขนาดและระยะขอบ), Transform (การหมุนและมาตราส่วน), Text (เนื้อหาของ TextView), Padding and Margin สำหรับแต่ละแอตทริบิวต์มีเมนูแบบเลื่อนลงพร้อมตัวเลือก: wrap_content, match_parent, match_constraint (0dp)
จุดเด่นของ Properties Panel คือ ตัวแก้ไขระยะขอบแบบภาพ (padding และ margin) พร้อมการแสดงกราฟิก คลิกที่ตัวเลขถัดจากลูกศรที่เกี่ยวข้องเพื่อเปลี่ยนระยะขอบด้วยแถบเลื่อน Layout Editor จะทำให้ระยะขอบเป็นปกติโดยอัตโนมัติ: หากระยะขอบทั้งสี่เท่ากัน จะใช้แอตทริบิวต์ android:layout_margin มิฉะนั้นจะใช้ android:layout_marginStart, android:layout_marginTop และอื่นๆ เป็นรายตัว
สำหรับการแก้ไข แอตทริบิวต์ Constraint ใน Properties Panel มีส่วนพิเศษชื่อ Constraints ที่นี่จะแสดงการเชื่อมต่อทั้งหมดขององค์ประกอบ: ว่าขอบแต่ละด้านเชื่อมต่อกับด้านไหนของพ่อแม่หรือองค์ประกอบอื่น คุณสามารถเปลี่ยนประเภทการเชื่อมต่อ เพิ่มหรือลบ constraint สามารถลบ constraint ได้โดยคลิกที่เส้นที่เกี่ยวข้องบนผืนผ้าใบในโหมด Blueprint
| หมวดหมู่ | ส่วนประกอบ | ตัวอย่างแอตทริบิวต์ |
|---|---|---|
| Widgets | TextView, ImageView, ProgressBar | textSize, src, max |
| Text | EditText, AutoCompleteTextView | hint, inputType, imeOptions |
| Buttons | Button, ImageButton, ToggleButton | text, onClick, backgroundTint |
| Containers | CardView, ScrollView, RecyclerView | cardCornerRadius, clipToPadding |
| Advanced | WebView, MapView, VideoView | loadUrl, zOrderOnTop |
เลย์เอาต์แบบปรับเปลี่ยนได้คือเลย์เอาต์ที่แสดงผลอย่างถูกต้องบน ขนาดหน้าจอที่แตกต่างกัน: ตั้งแต่โทรศัพท์ขนาดเล็ก (320dp) ไปจนถึงแท็บเล็ตขนาดใหญ่ (600dp+) และอุปกรณ์พับได้ Layout Editor มีเครื่องมือหลายอย่างสำหรับตรวจสอบและสร้างอินเทอร์เฟซที่ปรับเปลี่ยนได้
เครื่องมือแรกคือ Device for Preview ในแถบเครื่องมือ รายการแบบเลื่อนลงประกอบด้วยอุปกรณ์ยอดนิยม: Pixel 6, Pixel 9, Samsung Galaxy S25, Nexus 7, Nexus 9, Pixel C และอื่นๆ คุณสามารถเพิ่มอุปกรณ์ที่กำหนดเองด้วยขนาดหน้าจอและความหนาแน่นของพิกเซล (dpi) ตามต้องการ การสลับระหว่างอุปกรณ์ใช้เวลาหนึ่งวินาทีและแสดงให้เห็นว่าเลย์เอาต์มีลักษณะอย่างไรบนแต่ละหน้าจอ
เครื่องมือที่สองคือ ตัวระบุขนาด (qualifiers) สำหรับสร้างเลย์เอาต์ทางเลือก ใน Layout Editor คุณสามารถสร้างหลายเวอร์ชันของไฟล์ XML เดียวสำหรับขนาดหน้าจอ การวางแนว หรือความหนาแน่นที่แตกต่างกัน ตัวอย่างเช่น ไฟล์ activity_main.xml สำหรับโทรศัพท์และ activity_main-sw600dp.xml สำหรับแท็บเล็ต Layout Editor จะแสดงตัวอย่างสำหรับตัวระบุที่ใช้งานอยู่โดยอัตโนมัติ
วิธีที่สามคือ ConstraintLayout กับ Guidelines ในหน่วยเปอร์เซ็นต์ เส้นนำที่มีแอตทริบิวต์ app:layout_constraintGuide_percent ช่วยให้เชื่อมต่อองค์ประกอบกับตำแหน่งเป็นเปอร์เซ็นต์ ตัวอย่างเช่น guideline ที่ 50% จะแบ่งหน้าจอออกเป็นสองส่วนเท่าๆ กันโดยไม่ขึ้นกับขนาดของอุปกรณ์ นี่เป็นวิธีที่ยืดหยุ่นที่สุดในการสร้างเลย์เอาต์ที่ปรับเปลี่ยนได้โดยไม่ต้องทำซ้ำไฟล์ XML
Layout Editor ยังแสดง คำเตือน เกี่ยวกับปัญหาการปรับเปลี่ยน: สามเหลี่ยมสีเหลืองบนองค์ประกอบที่มีความกว้างคงที่ รูปภาพที่ใหญ่เกินไป หรือการซ้อนที่ไม่เหมาะสม นักพัฒนาสามารถคลิกที่คำเตือนและรับคำแนะนำในการแก้ไข
การเพิ่มประสิทธิภาพเลย์เอาต์ส่งผลโดยตรงต่อ ความเร็วในการเรนเดอร์ และความลื่นไหลของแอปพลิเคชัน Layout Editor ช่วยตรวจจับปัญหาผ่าน Layout Inspector ในตัวและคำเตือนในแผง Problems กฎพื้นฐานของการเพิ่มประสิทธิภาพ: ลดการซ้อน ใช้ ConstraintLayout แทน LinearLayout ที่ซ้อนกัน และเลือกแอตทริบิวต์ขนาดอย่างถูกต้อง
ความลึกของการซ้อน — ศัตรูหลักของประสิทธิภาพ คอนเทนเนอร์ที่ซ้อนกันแต่ละอันจะเพิ่มเวลาในการวัดและวาดผล เครื่องมือ Hierarchy View ใน Android Studio แสดงโครงสร้างต้นไม้ของเลย์เอาต์ หากความลึกเกิน 5–6 ระดับ ควรปรับโครงสร้างเลย์เอาต์ ConstraintLayout แก้ปัญหานี้โดยแทนที่การซ้อน 3–4 ระดับด้วยคอนเทนเนอร์แบบแบนราบเพียงอันเดียว
คำแนะนำสำหรับการเพิ่มประสิทธิภาพ XML เลย์เอาต์ใน Layout Editor:
Layout Inspector — เครื่องมือของ Android Studio สำหรับการโปรไฟล์เลย์เอาต์ขณะรันไทม์ของแอปพลิเคชัน มันแสดงลำดับชั้นจริง เวลาการวัดและการเรนเดอร์ของแต่ละส่วนประกอบ Layout Editor ผสานรวมกับ Layout Inspector: การดับเบิลคลิกที่คำเตือนจะเปิดปัญหาที่เกี่ยวข้องในรายงานโดยละเอียด
คำถามที่พบบ่อย
Layout Editor — เครื่องมือแก้ไข XML เลย์เอาต์แบบภาพที่อยู่ใน Android Studio มันช่วยให้สร้าง UI ของแอป Android โดยการลากส่วนประกอบไปยังผืนผ้าใบ ตั้งค่าแอตทริบิวต์ผ่านแผงคุณสมบัติ และดูผลลัพธ์แบบเรียลไทม์ โหมด Design, Blueprint และ Split ครอบคลุมทุกขั้นตอนของการพัฒนาเลย์เอาต์
Google แนะนำ ConstraintLayout สำหรับโปรเจกต์ใหม่เนื่องจากลำดับชั้นแบบแบนราบและ constraints ที่ยืดหยุ่น LinearLayout เหมาะสมสำหรับส่วนที่เป็นเส้นตรงง่ายๆ ที่มี 2–3 องค์ประกอบโดยไม่ต้องซ้อนกันเท่านั้น ในเลย์เอาต์เดียวคุณสามารถรวมทั้งสองวิธีโดยใช้ ConstraintLayout เป็นคอนเทนเนอร์ราก
ในโหมด Design วางเมาส์เหนือวงกลมที่ขอบขององค์ประกอบ (สำหรับ ConstraintLayout) กดปุ่มซ้ายของเมาส์ค้างไว้แล้วลากเส้นไปยังพ่อแม่หรือองค์ประกอบอื่นจนกระทั่งเกิดการยึด (snap) สำหรับการตั้งค่าระยะขอบแบบตัวเลข ให้ใช้ Properties Panel ส่วน Constraints นอกจากนี้ constraints ยังถูกสร้างโดยอัตโนมัติเมื่อเปิด Autoconnect
คำเตือนสีเหลืองบ่งชี้ถึงปัญหาที่อาจเกิดขึ้น: ประสิทธิภาพที่ไม่เหมาะสม (การซ้อนลึก ขนาดคงที่), ขาด content description สำหรับการเข้าถึง, สตริงที่ระบุตายตัว แทนการใช้ทรัพยากรจาก strings.xml คำเตือนแต่ละอันมีคำแนะนำในการแก้ไข Layout Editor ยังเน้นองค์ประกอบที่มีปัญหาเป็นสีแดงหากข้อผิดพลาดนั้นร้ายแรง
ใช้รายการแบบเลื่อนลง Device for Preview ในแถบเครื่องมือของ Layout Editor เลือกอุปกรณ์ใดๆ จากรายการหรือเพิ่มอุปกรณ์ที่กำหนดเองด้วยขนาดที่ต้องการ ในการตรวจสอบความสามารถในการปรับเปลี่ยน ให้สร้างเลย์เอาต์ทางเลือกด้วยตัวระบุ (sw600dp, sw720dp) และสลับระหว่างอุปกรณ์เหล่านั้นผ่านรายการเดียวกัน Layout Inspector บนอุปกรณ์จริงจะแสดงผลลัพธ์สุดท้าย
สรุป
เราจะพัฒนาแอปพลิเคชันบนมือถือแบบครบวงจร
IT Sectr สร้างแอปพลิเคชัน iOS และ Android สำหรับสตาร์ทอัพและธุรกิจตั้งแต่ปี 2017 เราจะให้คำแนะนำและเสนอวิธีแก้ปัญหาที่ดีที่สุดแก่คุณ