Split Screen คือโหมดหน้าจอแยกที่ช่วยให้เรียกใช้สองแอพพร้อมกันแบบเคียงข้างกัน โดยแบ่งพื้นที่ว่างที่มีอยู่ ผู้ใช้สามารถลากตัวแบ่งระหว่างหน้าต่าง ปรับสัดส่วน และสลับแอพในแต่ละครึ่งได้อย่างรวดเร็ว ตามข้อมูลจาก Android Developers (2025) Split Screen เป็นส่วนหนึ่งของโปรแกรมความเข้ากันได้บังคับสำหรับอุปกรณ์ทั้งหมดที่มีความกว้างหน้าจอตั้งแต่ 600 dp ขึ้นไป และรองรับทั้งบน Android และ iPadOS
ประเด็นสำคัญ
Split Screen คือโหมดมัลติทาสก์ที่หน้าจอถูกแบ่งออกเป็นสองพื้นที่ใช้งาน แต่ละพื้นที่มีแอพแยกกัน ต่างจาก Slide Over หรือ PiP ที่หน้าต่างหนึ่งลอยอยู่เหนืออีกหน้าต่างหนึ่ง Split Screen ให้สถานะเท่าเทียมกันแก่ทั้งสองแอพ — แต่ละแอพได้รับครึ่งหน้าจอของตัวเอง
โหมดนี้พร้อมใช้งานบน Android (ตั้งแต่ 7.0 Nougat), iPadOS (ตั้งแต่ iOS 9), Windows (Snap Assist) และสภาพแวดล้อมเดสก์ท็อป Linux บางรุ่น ในการพัฒนาแอพมือถือ Split Screen ถือเป็นสถานการณ์บังคับสำหรับแท็บเล็ตและอุปกรณ์พับได้ ซึ่ง มัลติทาสก์ เป็นข้อได้เปรียบสำคัญของแพลตฟอร์ม
ผู้ใช้เปิดใช้งาน Split Screen โดยการกดไอคอนแอพค้างไว้ใน Overview (Android) หรือลากจาก Dock (iPad) หลังจากเปิดใช้งาน หน้าจอจะแบ่งออก และผู้ใช้เลือกแอพที่สองจากรายการล่าสุดหรือจาก Dock
ใน Android Split Screen จัดการผ่าน Window Manager เมื่อผู้ใช้เปิดใช้งานโหมด ระบบจะสร้าง StackView สองอัน — หนึ่งอันต่อ Activity ตัวแบ่งระหว่างหน้าต่างแสดงผลโดยระบบ โดยมีความหนาขั้นต่ำ 1 dp ซึ่งอาจเพิ่มขึ้นบนอุปกรณ์ที่มี Gesture Navigation
แต่ละแอพได้รับการแจ้งเตือนการเปลี่ยนขนาดผ่าน onConfigurationChanged หาก Activity ไม่จัดการเหตุการณ์นี้ มันจะถูกทำลายและสร้างใหม่ สำหรับวิดีโอและเกม สิ่งนี้สำคัญมาก: การสร้าง Activity ใหม่จะรีเซ็ตตำแหน่งการเล่นหรือสถานะเกม
สัดส่วนหน้าต่างสามารถเปลี่ยนได้โดยการลากตัวแบ่ง Android รองรับสามสถานะ: 50/50, 70/30 และ 30/70 ผู้ใช้ยังสามารถสลับแอพได้ ซึ่งจะทำให้ Activity เริ่มต้นใหม่หากไม่ได้จัดการ configChanges
Split View คือการใช้งาน Split Screen ใน iPadOS ต่างจาก Android ที่การแบ่งหน้าจอเริ่มจากกึ่งกลางเสมอ iPadOS เสนอตำแหน่งตัวแบ่งสามตำแหน่งแก่ผู้ใช้: 50/50, 25/75 และ 75/25 โหมดนี้เปิดใช้งานผ่าน Dock หรือ App Exposé
ใน iPadOS แอพใน Split View สามารถย่อเป็น Slide Over — หน้าต่างลอย — นี่คือคุณสมบัติเฉพาะของ Apple: ผู้ใช้สามารถแปลงหน้าต่างหนึ่งจาก Split View เป็น Slide Over และกลับมาโดยไม่สูญเสียข้อมูล นักพัฒนาต้องรองรับทั้งสามโหมด: เต็มหน้าจอ, Split View และ Slide Over
เพื่อรองรับ Split View ใน iOS แอพต้องใช้เลย์เอาต์แบบปรับเปลี่ยนได้ผ่าน Size Classes และซีน (UIScene) ตั้งแต่ iOS 13 Apple กำหนดให้แอพจัดการโหมดหลายหน้าต่างอย่างถูกต้อง — มิฉะนั้นระบบอาจบังคับให้ Activity เริ่มต้นใหม่บน iPad
เมื่อเข้าและออกจาก Split Screen การเปลี่ยนแปลงการกำหนดค่าเกิดขึ้น: ความกว้าง ความสูง และอัตราส่วนของหน้าต่างเปลี่ยนไป พฤติกรรมมาตรฐานของ Android คือการสร้าง Activity ใหม่ (onDestroy + onCreate) เพื่อหลีกเลี่ยงสิ่งนี้ ให้ระบุ android:configChanges ใน manifest
เมื่อสร้างใหม่ Activity จะสูญเสียสถานะ View และ ViewModel ใช้ SavedStateHandle เพื่อบันทึกสถานะ UI หรือ ViewModel ที่มีขอบเขตเป็น Application ทางเลือกคือ onRetainNonConfigurationInstance() สำหรับวัตถุที่ซับซ้อน
@Override
fun onConfigurationChanged(newConfig: Configuration) {
super.onConfigurationChanged(newConfig)
val isSplitScreen = isInMultiWindowMode()
if (isSplitScreen) {
adjustLayoutForSplitScreen()
}
}
ใน iPadOS กลไกที่เทียบเท่าคือ traitCollectionDidChange หรือ viewWillTransitionToSize นักพัฒนาได้รับขนาดคอนเทนเนอร์ใหม่และต้องสร้างเลย์เอาต์ใหม่ตาม Size Class
บน Android การรองรับ Split Screen เริ่มต้นด้วยการตั้งค่าแฟล็ก resizeableActivity ใน manifest หลังจากนั้น Activity สามารถหดเหลือความกว้างขั้นต่ำ 220 dp หากแอพไม่รองรับหน้าจอแคบเช่นนี้ ให้ระบุ android:minWidth ใน manifest
สำหรับ iPad นักพัฒนาเพียงแค่ต้องรองรับ Size Classes และใช้ Auto Layout หรือ SwiftUI SwiftUI จะปรับอินเทอร์เฟซโดยอัตโนมัติเมื่อเข้าสู่ Split View — ตัวอย่างเช่น NavigationSplitView สลับระหว่างโหมดซ้อนกันและเคียงข้างกัน
แนะนำให้ทดสอบ Split Screen บนอุปกรณ์จริงหรือในอีมูเลเตอร์ที่มีการตั้งค่าหน้าต่างแบบปรับขนาดได้หลายขนาด Android Emulator อนุญาตให้เปิดหน้าต่างจำนวนเท่าใดก็ได้ผ่าน ADB และตรวจสอบพฤติกรรมของแอพในสัดส่วนต่างๆ
| แพลตฟอร์ม | กลไกการปรับตัว | ความกว้างขั้นต่ำ |
|---|---|---|
| Android | resizeableActivity + configChanges | 220 dp |
| iPadOS | Size Classes + UIScene | 320 pt (หลัก) |
ข้อผิดพลาดแรกคือการละเลยการรักษาสถานะ ใน Split Screen Activity สามารถถูกสร้างใหม่ได้ทุกเมื่อโดยไม่ต้องมีการกระทำของผู้ใช้ หากข้อมูลถูกเก็บไว้ในตัวแปรท้องถิ่นเท่านั้น ข้อมูลจะสูญหาย ใช้ ViewModel สำหรับข้อมูลบนหน้าจอและ SavedStateHandle สำหรับสถานะที่สำคัญ
ข้อผิดพลาดที่สองคือการซ่อนเนื้อหาเมื่อหน้าต่างหด变小 นักพัฒนาบางคนซ่อนองค์ประกอบเมื่อความกว้างลดลงต่ำกว่าเกณฑ์ที่กำหนด วิธีการที่ถูกต้องคือการสร้างเลย์เอาต์ใหม่: บนหน้าจอแคบ ให้แสดงเฉพาะสิ่งที่สำคัญที่สุดแทนที่จะซ่อนทุกอย่าง Window Size Class มีจุดแบ่งที่พร้อมใช้งานสำหรับตรรกะนี้
ข้อผิดพลาดที่สามคือไม่จัดการ onWindowFocusChanged ใน Split Screen โฟกัสสามารถสลับระหว่างหน้าต่างได้โดยไม่ต้องปิดแอพ การละเลยเหตุการณ์นี้ทำให้เครื่องเล่นวิดีโอหยุดเมื่อผู้ใช้เพียงแค่มองไปที่หน้าต่างข้างเคียง
คำถามที่พบบ่อย
ใช้ Intent กับ FLAG_ACTIVITY_LAUNCH_ADJACENT หากอุปกรณ์อยู่ในโหมด Split Screen แอพจะเปิดในหน้าต่างที่อยู่ติดกัน หากอุปกรณ์อยู่ในโหมดเต็มหน้าจอ แฟล็กจะถูก ignored
ใช่ Activity ยังคงมองเห็นได้แต่สูญเสียโฟกัส — มีการเรียก onPause แต่ไม่เรียก onStop เมื่อออกจาก Split Screen จะมีการเรียก onMultiWindowModeChanged ตามด้วย onResume
ใช้ WindowManager.getCurrentWindowMetrics() หรือ Jetpack WindowManager อย่าใช้ Display.getSize() — มันคืนค่าทั้งหน้าจอ ไม่ใช่หน้าต่างแอพปัจจุบัน
ใช่ บนอุปกรณ์ในสถานะกางออก Split Screen มักเป็นโหมดเริ่มต้น Samsung Galaxy Z Fold ในโหมดแนวนอนเสนอ Split Screen พร้อมสามแอพพร้อมกัน
ตั้งค่า android:resizeableActivity="false" สำหรับ Activity นั้น สำหรับ API 24+ แฟล็กนี้จะปิดการใช้งาน Split Screen บน Android 12L+ ให้ใช้ android:minWidth และ android:minHeight
สรุป
เราจะพัฒนาแอปพลิเคชันบนมือถือแบบครบวงจร
IT Sectr สร้างแอปพลิเคชัน iOS และ Android สำหรับสตาร์ทอัพและธุรกิจตั้งแต่ปี 2017 เราจะให้คำแนะนำและเสนอวิธีแก้ปัญหาที่ดีที่สุดแก่คุณ
อ่านเพิ่มเติม