การวางแนว สัดส่วนการแสดงผล และการปรับขนาดแอป

แอป Android ทำงานบนอุปกรณ์ทุกประเภท ไม่ว่าจะเป็นโทรศัพท์ แท็บเล็ต อุปกรณ์พับได้ อุปกรณ์ ChromeOS รถยนต์ ทีวี และแม้แต่ XR แอปของคุณควรจะรองรับรูปแบบอุปกรณ์และขนาดการแสดงผลทั้งหมดเพื่อปรับให้เข้ากับสภาพแวดล้อมที่หลากหลายนี้

Android 16 (API ระดับ 36) ช่วยให้แอปปรับให้เข้ากับรูปแบบของอุปกรณ์และ ขนาดการแสดงผลต่างๆ ได้โดยการลบล้างข้อจำกัดของแอปสำหรับการวางแนวหน้าจอ สัดส่วน ภาพ และความสามารถในการปรับขนาด การลบล้างจะมีผลกับอุปกรณ์ที่มีความกว้างน้อยที่สุด >= 600dp ซึ่งกำหนดสิ่งต่อไปนี้

  • แท็บเล็ต
  • จอแสดงผลด้านในของอุปกรณ์พับได้ที่มีหน้าจอขนาดใหญ่
  • การแสดงหน้าต่างบนเดสก์ท็อป (ในทุกรูปแบบของอุปกรณ์)

แอปที่กำหนดเป้าหมายเป็น API ระดับ 36 จะปรับขนาดได้และเข้าสู่โหมดหลายหน้าต่าง (เทียบเท่ากับ resizeableActivity="true") ได้หากความกว้างที่เล็กที่สุดของจอแสดงผลมีค่า >= 600dp

แอปจะแสดงผลแบบแถบดำด้านข้างบนอุปกรณ์หน้าจอขนาดใหญ่ที่ยังไม่ได้พับก่อน Android 16 แต่จะแสดงผลแบบเต็มหน้าจอเมื่อกำหนดเป้าหมายเป็น Android 16 แอปจะแสดงรายการข่าวเพิ่มเติมเมื่อเต็มหน้าจอแทนที่จะมีแถบปรากฏอยู่ตามขอบ
รูปที่ 1 ฟีดข่าวสารสำหรับนักพัฒนาแอปที่ก่อนหน้านี้แสดงแบบ Letterbox บนอุปกรณ์ที่มีหน้าจอขนาดใหญ่ (ซ้าย) จะแสดงแบบเต็มหน้าจอเมื่อกำหนดเป้าหมายเป็น Android 16 (ขวา)

Android 16 บังคับใช้รูปแบบการออกแบบแอปแบบปรับได้ที่สอดคล้องกัน ซึ่งจะเพิ่มประสิทธิภาพ ประสบการณ์ของผู้ใช้โดยการคำนึงถึงค่ากำหนดของผู้ใช้สำหรับแนวอุปกรณ์ สัดส่วน ภาพ และขนาดการแสดงผล

การเปลี่ยนแปลง

ระบบจะไม่สนใจแอตทริบิวต์ Manifest และ API ต่อไปนี้สำหรับแอปที่กำหนดเป้าหมายเป็น Android 16 (API ระดับ 36) บนหน้าจอขนาดใหญ่

แอตทริบิวต์หรือ API ค่าที่ระบบไม่สนใจ
screenOrientation portrait, landscape, reversePortrait, reverseLandscape, sensorPortrait, sensorLandscape, userPortrait, userLandscape
resizeableActivity ทั้งหมด
minAspectRatio ทั้งหมด
maxAspectRatio ทั้งหมด
setRequestedOrientation()

getRequestedOrientation()
portrait, landscape, reversePortrait, reverseLandscape, sensorPortrait, sensorLandscape, userPortrait, userLandscape

ข้อยกเว้น

ข้อยกเว้นสำหรับการเปลี่ยนแปลงใน Android 16 ได้แก่

  • จอแสดงผลที่มีขนาดเล็กกว่า sw600dp (โทรศัพท์ส่วนใหญ่ อุปกรณ์แบบพับได้ และจอแสดงผลด้านนอก ของอุปกรณ์แบบพับได้หน้าจอขนาดใหญ่)

  • เกมที่อิงตามธง android:appCategory

    เผยแพร่เกมโดยใช้ Android App Bundle และ Play App Signing เพื่ออนุญาตให้ Google Play จัดการฟีเจอร์และมอบสิทธิประโยชน์ของ App Bundle โดยอัตโนมัติ ดูภาพรวมของไฟล์ Manifest ของแอปด้วย

  • ผู้ใช้เลือกใช้ลักษณะการทำงานเริ่มต้นของแอปในการตั้งค่าสัดส่วนภาพ

เลือกไม่ใช้

หากต้องการเลือกไม่ใช้ลักษณะการทํางานของ API ระดับ 36 ให้ประกาศPROPERTY_COMPAT_ALLOW_RESTRICTED_RESIZABILITYพร็อพเพอร์ตี้ไฟล์ Manifest

หากต้องการเลือกไม่ใช้กิจกรรมที่เฉพาะเจาะจง ให้ตั้งค่าพร็อพเพอร์ตี้ในองค์ประกอบ <activity> ดังนี้

<activity ...>
    <property
        android:name="android.window.PROPERTY_COMPAT_ALLOW_RESTRICTED_RESIZABILITY"
        android:value="true" />
    ...
</activity>

หากต้องการเลือกไม่ใช้สำหรับทั้งแอป ให้ตั้งค่าพร็อพเพอร์ตี้ในองค์ประกอบ <application> ดังนี้

<application ...>
    <property
        android:name="android.window.PROPERTY_COMPAT_ALLOW_RESTRICTED_RESIZABILITY"
        android:value="true" />
    ...
</application>

การทดสอบ

หากต้องการทดสอบว่าแอปได้รับผลกระทบจากการเปลี่ยนแปลงใน Android 16 หรือไม่ ให้ใช้โปรแกรมจำลอง Pixel Tablet และ Pixel Fold ใน Android Studio แล้วตั้งค่า targetSdkPreview = "Baklava" ในไฟล์โมดูล build.gradle ของแอป

หรือใช้เฟรมเวิร์กความเข้ากันได้ของแอปในอุปกรณ์ทดสอบโดยเปิดใช้แฟล็ก UNIVERSAL_RESIZABLE_BY_DEFAULT (ดูเครื่องมือเฟรมเวิร์กความเข้ากันได้)

คุณสามารถทำการทดสอบโดยอัตโนมัติได้ด้วยเฟรมเวิร์กการทดสอบ Espresso และ Jetpack Compose Testing API

ปัญหาที่พบบ่อย

แอปที่จำกัดการวางแนวของอุปกรณ์ สัดส่วนภาพ หรือความสามารถในการปรับขนาดของแอปอาจ มีปัญหาในการแสดงผลบน Android 16 เช่น เลย์เอาต์ซ้อนทับกัน

หากต้องการมอบประสบการณ์การใช้งานที่ดีที่สุดบนโทรศัพท์ อุปกรณ์พับได้ แท็บเล็ต อุปกรณ์ ChromeOS จอแสดงผลในรถยนต์ และ XR ให้สร้างแอปให้ตอบสนองและปรับเปลี่ยนได้ ดังนี้

  • หลีกเลี่ยงคอมโพเนนต์ UI ที่ยืดออก: เลย์เอาต์ที่ออกแบบมาสำหรับหน้าจอโทรศัพท์มาตรฐานแนวตั้ง มักจะรองรับสัดส่วนภาพอื่นๆ ไม่ได้ ตัวอย่างเช่น องค์ประกอบ UI ที่เติมความกว้างทั้งหมดของจอแสดงผลจะปรากฏ แบบยืดในแนวนอน เพิ่มความกว้างสูงสุดให้กับคอมโพเนนต์เพื่อ หลีกเลี่ยงการยืด

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

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

  • คงสถานะไว้ระหว่างการเปลี่ยนขนาดหน้าต่าง: การนำข้อจำกัดด้านการวางแนว และสัดส่วนภาพออกอาจส่งผลให้ขนาดหน้าต่างแอปเปลี่ยนแปลงบ่อย เพื่อตอบสนองต่อวิธีที่ผู้ใช้ต้องการใช้แอป เช่น การหมุน การพับ หรือการกางอุปกรณ์ หรือการปรับขนาดแอปในโหมดหลายหน้าต่างหรือ โหมดหน้าต่างเดสก์ท็อป การเปลี่ยนแปลงการกำหนดค่า เช่น การเปลี่ยนแปลงการวางแนว และการปรับขนาดหน้าต่าง จะทำให้เกิดการสร้างกิจกรรมขึ้นใหม่ (โดยค่าเริ่มต้น) เพื่อช่วยมอบประสบการณ์การใช้งานที่ดีที่สุด โปรดรักษาสถานะของแอปไว้ในระหว่างการเปลี่ยนแปลงการกำหนดค่า เพื่อให้แอปเก็บข้อมูล (เช่น ข้อมูลที่ป้อนในแบบฟอร์ม) และผู้ใช้สามารถรักษา บริบทไว้ได้

  • ใช้คลาสขนาดหน้าต่าง: รองรับขนาดหน้าต่างและสัดส่วนภาพที่แตกต่างกันโดยไม่ต้องปรับแต่งเฉพาะอุปกรณ์ สมมติว่าขนาดหน้าต่าง จะเปลี่ยนแปลงบ่อย ใช้คลาสขนาดหน้าต่างเพื่อระบุลักษณะของขนาดหน้าต่าง แล้วใช้เลย์เอาต์แบบปรับได้ที่เหมาะสม

  • สร้างเลย์เอาต์ที่ปรับเปลี่ยนตามอุปกรณ์: ภายในคลาสขนาดหน้าต่าง เลย์เอาต์ที่ปรับเปลี่ยนตามอุปกรณ์ จะปรับให้เข้ากับการเปลี่ยนแปลงในขนาดการแสดงผลเพื่อสร้างการนำเสนอแอปที่เหมาะสมที่สุดเสมอ

ไทม์ไลน์

  • Android 16 (2025): การรองรับการวางแนวและสัดส่วนภาพทั้งหมด รวมถึงความสามารถในการปรับขนาดแอปจะเป็นประสบการณ์พื้นฐานสำหรับอุปกรณ์หน้าจอขนาดใหญ่ (ความกว้างของหน้าจอที่เล็กที่สุด >= 600dp) สำหรับแอปที่กำหนดเป้าหมายเป็น API ระดับ 36 อย่างไรก็ตาม นักพัฒนาแอปสามารถเลือกไม่ใช้ได้
ระดับ API เป้าหมาย อุปกรณ์ที่ใช้ได้ อนุญาตให้นักพัฒนาแอปเลือกไม่ใช้
36 (Android 16) อุปกรณ์ที่มีหน้าจอขนาดใหญ่ (ความกว้างของหน้าจอที่เล็กที่สุด >= 600dp) ใช่

กำหนดเวลาสำหรับการกำหนดเป้าหมาย API ระดับที่เฉพาะเจาะจงจะขึ้นอยู่กับ App Store Google Play จะกำหนดให้แอปกำหนดเป้าหมายเป็น API ระดับ 36 ตั้งแต่เดือนสิงหาคม 2026

แหล่งข้อมูลเพิ่มเติม