Window Size Class — คืออะไร คลาสขนาดและการพัฒนา

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

Window Size Class คือ API จาก Jetpack WindowManager ที่แบ่งหน้าต่างแอปพลิเคชันออกเป็นสามประเภท: Compact, Medium และ Expanded แทนที่จะตรวจสอบความละเอียดทางกายภาพหรือความหนาแน่นของพิกเซล คลาสจะวิเคราะห์ความกว้างที่มีอยู่ในหน่วย dp — ซึ่งให้ผลลัพธ์ที่คาดเดาได้บนทุกอุปกรณ์ ตาม Android Developers Documentation (2025) Window Size Class กลายเป็นมาตรฐานสำหรับอินเทอร์เฟซแบบปรับเปลี่ยนได้ใน Jetpack Compose และระบบ View ต้องขอบคุณ WindowManager

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

  • Window Size Class — API สำหรับจัดหมวดหมู่ความกว้างหน้าต่างเป็น Compact, Medium และ Expanded
  • Compact — คลาสสำหรับหน้าต่างแคบสูงสุด 600 dp ซึ่งทั่วไปสำหรับโทรศัพท์ในโหมดแนวตั้ง
  • Medium — คลาสสำหรับหน้าต่าง 600–840 dp ซึ่งเป็นลักษณะของแท็บเล็ตในแนวตั้งและโทรศัพท์ในแนวนอน
  • Expanded — คลาสสำหรับหน้าต่างกว้างตั้งแต่ 840 dp ซึ่งพบบนแท็บเล็ตและเดสก์ท็อป
  • Material Design 3 ใช้ Window Size Class เป็นพื้นฐานสำหรับเลย์เอาต์แบบปรับเปลี่ยนได้

Window Size Class คืออะไร?

Window Size Class คือ API ของแพลตฟอร์ม Android ที่รวมอยู่ในไลบรารี Jetpack WindowManager ซึ่งจัดประเภทพื้นที่ว่างของหน้าต่างแอปพลิเคชันออกเป็นสามประเภท แตกต่างจากแนวทางดั้งเดิมด้วยตัวระบุทรัพยากร (small/large/xlarge) Window Size Class ให้ชุดค่าที่ไม่ต่อเนื่องซึ่งนักพัฒนาสามารถพึ่งพาได้เมื่อออกแบบอินเทอร์เฟซ

API ปรากฏใน Android 7.0 Nougat ซึ่งเป็นส่วนหนึ่งของการรองรับโหมดหลายหน้าต่าง แต่การนำไปใช้อย่างจริงจังเริ่มต้นด้วย Jetpack WindowManager 1.1 (2022) Google แนะนำ Window Size Class เป็นเครื่องมือหลักสำหรับการสร้างเลย์เอาต์แบบปรับเปลี่ยนได้แทนที่จะตรวจสอบความกว้างหน้าจอผ่าน Display.getSize()

การจำแนกประเภทขึ้นอยู่กับความกว้างของหน้าต่างในหน่วย dp ไม่ใช่ขนาดทางกายภาพหรือความหนาแน่นของพิกเซล ซึ่งหมายความว่าอุปกรณ์สองเครื่องที่มีความละเอียดต่างกันแต่ความกว้างในหน่วย dp เท่ากันจะได้รับคลาสเดียวกัน — อินเทอร์เฟซจะเหมือนกันอย่างคาดเดาได้

คลาสขนาดหน้าต่างสามคลาสของ Android

Compact — คลาสสำหรับหน้าต่างกว้างสูงสุด 600 dp โทรศัพท์ในโหมดแนวตั้ง อุปกรณ์พับได้ส่วนใหญ่ (Galaxy Z Flip) ในสถานะพับ อินเทอร์เฟซสร้างในคอลัมน์เดียว การนำทางผ่าน Bottom Navigation

Medium — คลาสสำหรับหน้าต่างกว้าง 600–840 dp แท็บเล็ตในแนวตั้ง โทรศัพท์ในแนวนอน อุปกรณ์พับได้ในสถานะกึ่งเปิด อินเทอร์เฟซใช้สองคอลัมน์ — ตัวอย่างเช่น รายการทางซ้ายและรายละเอียดทางขวา Navigation Rail แทนที่ Bottom Navigation

Expanded — คลาสสำหรับหน้าต่างกว้างตั้งแต่ 840 dp แท็บเล็ตในแนวนอน หน้าต่างเดสก์ท็ป อุปกรณ์พับได้ในสถานะกางออก อินเทอร์เฟซสามารถใช้สามแผงขึ้นไป Permanent Navigation Drawer แผงเครื่องมือ

ใน Material Design 3 มีการกำหนดคอมโพเนนต์แบบปรับเปลี่ยนได้สำหรับแต่ละคลาส: Navigation Rail สำหรับ Medium, Navigation Drawer สำหรับ Expanded, Bottom Navigation สำหรับ Compact นักพัฒนาไม่จำเป็นต้องเลือก breakpoints — กำหนดไว้แล้วโดย API

Window Size Class ทำงานอย่างไร

Window Size Class คำนวณจากความกว้างปัจจุบันของหน้าต่างแอปพลิเคชันในหน่วย dp โดยคำนึงถึงองค์ประกอบของระบบ — แถบสถานะ แถบนำทาง การแบ่งหน้าจอในโหมด Split Screen API จะทำงานเมื่อการกำหนดค่าหน้าต่างเปลี่ยนแปลง: การหมุนอุปกรณ์ การเข้าสู่โหมดหลายหน้าต่าง การกางอุปกรณ์พับได้

ในการรับคลาส จะใช้คลาส WindowSizeClass จากไลบรารี androidx.window นักพัฒนาสมัครสมาชิก Flow (Kotlin) หรือ LiveData (Java) ซึ่งอัปเดตคลาสโดยอัตโนมัติทุกครั้งที่ขนาดหน้าต่างเปลี่ยนแปลง — โดยไม่ต้องจัดการ onConfigurationChanged ด้วยตนเอง

การจำแนกประเภทเกิดขึ้นในสามขั้นตอน ขั้นแรก — วัดความกว้างหน้าต่างปัจจุบันเป็นพิกเซล ขั้นที่สอง — แปลงเป็น dp ผ่าน DisplayMetrics.density ขั้นที่สาม — เปรียบเทียบค่าที่ได้กับเกณฑ์: น้อยกว่า 600 dp — Compact, 600–840 — Medium, ตั้งแต่ 840 — Expanded

kotlin
val windowSizeClass = currentWindowAdaptiveInfo().windowSizeClass()

when (windowSizeClass.windowWidthSizeClass) {
    WindowWidthSizeClass.COMPACT -> // compact width
    WindowWidthSizeClass.MEDIUM  -> // medium width
    WindowWidthSizeClass.EXPANDED -> // expanded width
}

นอกจากความกว้าง (windowWidthSizeClass) แล้ว API ยังมีคลาสสำหรับความสูงของหน้าต่าง (windowHeightSizeClass) — มีประโยชน์สำหรับการวางแนวแนวนอนและหน้าต่างเดสก์ท็อป

Window Size Class ใน Jetpack Compose

ใน Jetpack Compose Window Size Class ใช้ผ่านฟังก์ชัน currentWindowAdaptiveInfo() ซึ่งส่งคืน WindowAdaptiveInfo พร้อมคลาสความกว้างและความสูง ฟังก์ชันนี้ไม่เพียงคำนึงถึงขนาดหน้าต่าง แต่ยังรวมถึงประเภทอินพุต (คีย์บอร์ด เมาส์ สัมผัส) — ผ่าน WindowPosture และ WindowLayoutInfo

สถานการณ์ทั่วไปคือการสลับระหว่างเลย์เอาต์ตามคลาส ตัวอย่างเช่น ใน Compact แสดง BottomSheet พร้อมตัวเลือก ใน Medium — แผงด้านข้าง ใน Expanded — Navigation Drawer ถาวร

kotlin
@Composable
fun AdaptiveNavigation(windowSizeClass: WindowWidthSizeClass) {
    when (windowSizeClass) {
        WindowWidthSizeClass.COMPACT -> BottomNavigation()
        WindowWidthSizeClass.MEDIUM  -> NavigationRail()
        WindowWidthSizeClass.EXPANDED -> NavigationDrawer()
    }
}

ใน Material Design 3 คอมโพเนนต์ NavigationSuiteScaffold ปรับตัวเข้ากับ Window Size Class โดยอัตโนมัติ — นักพัฒนาไม่จำเป็นต้องเขียนตรรกะแบบมีเงื่อนไข

Window Size Class และ Material Design 3

Material Design 3 (Material You) ถูกรวมเข้ากับ Window Size Class อย่างสมบูรณ์ ระบบเลย์เอาต์แบบปรับเปลี่ยนได้ใน Material 3 กำหนดว่าควรใช้คอมโพเนนต์การนำทางใดสำหรับแต่ละคลาส: BottomNavigation สำหรับ Compact, NavigationRail สำหรับ Medium, NavigationDrawer สำหรับ Expanded

การรวมนี้ทำงานในระดับ Adaptive API ซึ่งรวม Window Size Class เข้ากับสัญญาณอื่น ๆ — FoldState (อุปกรณ์พับได้) และ WindowPosture (ตำแหน่งหน้าจอ) Adaptive API พร้อมใช้งานผ่านไลบรารี material3-adaptive

Material 3 มีคอมโพเนนต์แบบปรับเปลี่ยนได้ระดับสูงสี่รายการ: ListDetailPaneScaffold, SupportingPaneScaffold, NavigationSuiteScaffold และ AdaptiveSheet แต่ละรายการเปลี่ยนพฤติกรรมตาม Window Size Class โดยไม่ต้องกำหนดค่าเพิ่มเติม

คลาสคอมโพเนนต์การนำทางPane Scaffold
CompactBottom Navigationแผงที่ซ่อน
MediumNavigation Railแผงเลื่อน
ExpandedNavigation Drawerแผงถาวร

ประโยชน์ของเลย์เอาต์แบบปรับเปลี่ยนได้

การใช้ Window Size Class ให้ข้อได้เปรียบสำคัญสามประการในการพัฒนาแอปมือถือ ข้อแรก — ความสามารถในการคาดเดา: แทนที่จะรวมขนาดหน้าจอเป็นร้อยแบบ นักพัฒนาทำงานกับสามคลาส ซึ่งลดจำนวนสถานการณ์ทดสอบและ บั๊ก ที่เกี่ยวข้องกับเลย์เอาต์ลงอย่างรุนแรง

ข้อสอง — การปรับตัวอัตโนมัติกับโหมดหลายหน้าต่าง เมื่อผู้ใช้เข้าสู่ Split Screen ความกว้างหน้าต่างจะเปลี่ยน — Window Size Class คำนวณใหม่ทันทีและอินเทอร์เฟซปรับตัว หากไม่มี API นี้ แอปในหน้าจอแยกจะแสดงเวอร์ชันอินเทอร์เฟซโทรศัพท์ที่ลดขนาดลง

ข้อสาม — ความสอดคล้องกับ Material Design 3 Google ได้สร้าง Window Size Class ไว้ในระบบคอมโพเนนต์แบบปรับเปลี่ยนได้ ดังนั้นอินเทอร์เฟซที่สร้างบน Material 3 จะปฏิบัติตามคำแนะนำการออกแบบหน้าจอใหญ่ของ Google โดยอัตโนมัติโดยไม่ต้องทำงานเพิ่มเติม

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

Window Size Class ต่างจาก Screen Size Buckets อย่างไร?

Screen Size Buckets (small/large/xlarge) เป็นแนวทางที่ล้าสมัยจาก Android 1.6–6.0 ซึ่งอิงตามขนาดทางกายภาพของหน้าจอ Window Size Class มุ่งเน้นที่ความกว้างหน้าต่างที่มีอยู่ในหน่วย dp และทำงานแบบเรียลไทม์เมื่อขนาดหน้าต่างเปลี่ยน

จำเป็นต้องรองรับ Window Size Class บน Android 6 และต่ำกว่าหรือไม่?

Window Size Class พร้อมใช้งานผ่าน Jetpack WindowManager บน Android 7.0+ พร้อมไลบรารีย้อนกลับ สำหรับ Android 6 และต่ำกว่า — เฉพาะ Compact เนื่องจากไม่มีโหมดหลายหน้าต่าง ใช้ fallback ผ่าน WindowMetrics

Window Size Class ทำงานบนอุปกรณ์พับได้อย่างไร?

เมื่อกางอุปกรณ์ ความกว้างหน้าต่างจะเปลี่ยนและ Window Size Class คำนวณใหม่โดยอัตโนมัติ คลาสสามารถเปลี่ยนจาก Compact เป็น Expanded เนื่องจากการเพิ่มขึ้นของพื้นที่ว่าง

สามารถใช้ Window Size Class ในเลย์เอาต์ XML (Views) ได้หรือไม่?

ได้ ผ่าน WindowManager ใน Activity หรือ Fragment หลังจากได้รับ WindowSizeClass ให้ใช้ตรรกะแบบมีเงื่อนไขเพื่อสลับระหว่างเลย์เอาต์ XML หรือเปลี่ยนการมองเห็นของ View

เกณฑ์ใดที่ใช้สำหรับ WindowHeightSizeClass?

สำหรับความสูงของหน้าต่าง เกณฑ์แตกต่างกัน: Compact — สูงสุด 480 dp, Medium — 480–900 dp, Expanded — ตั้งแต่ 900 dp WindowHeightSizeClass มีประโยชน์ในการวางแนวแนวนอนและบนเดสก์ท็อป

สรุป

  • Window Size Class — API ของ Jetpack WindowManager สำหรับจัดหมวดหมู่ความกว้างหน้าต่างเป็น Compact, Medium และ Expanded
  • Compact — สูงสุด 600 dp, อินเทอร์เฟซคอลัมน์เดียว, Bottom Navigation
  • Medium — 600–840 dp, อินเทอร์เฟซสองคอลัมน์, Navigation Rail
  • Expanded — ตั้งแต่ 840 dp, อินเทอร์เฟซหลายแผง, Navigation Drawer
  • Jetpack Compose — ฟังก์ชัน currentWindowAdaptiveInfo() สำหรับรับคลาสในรันไทม์
  • Material Design 3 — คอมโพเนนต์แบบปรับเปลี่ยนได้ตอบสนองต่อ Window Size Class โดยอัตโนมัติ
  • บทสรุป — Window Size Class แทนที่การปรับเปลี่ยนแบบดั้งเดิมที่ใช้ breakpoints และทำให้อินเทอร์เฟซคาดเดาได้บนทุกอุปกรณ์

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

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

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

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