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

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

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

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

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

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

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

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

ระบบจะไม่สนใจแอตทริบิวต์และ API ต่อไปนี้ในไฟล์ Manifest สำหรับแอปที่กำหนดเป้าหมายเป็น 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 (โทรศัพท์ส่วนใหญ่ โทรศัพท์แบบฝาพับ และหน้าจอด้านนอกของอุปกรณ์แบบพับได้หน้าจอขนาดใหญ่)

  • เกมตาม Flag 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 Series ใน Android Studio และตั้งค่า targetSdkPreview = "Baklava" ในไฟล์ build.gradle ของโมดูลแอป

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

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

ปัญหาที่พบได้ทั่วไป

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

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

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

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

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

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

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

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

ไทม์ไลน์

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

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

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

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

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