โหมดความเข้ากันได้ของอุปกรณ์

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

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

อุปกรณ์อ้างอิง

อุปกรณ์ต่อไปนี้อาจต้องลบล้างต่อแอปเนื่องจากผิดปกติ หรือการกำหนดค่าที่แอปไม่รองรับ เช่น

  • แท็บเล็ต: การวางแนวตามธรรมชาติของแท็บเล็ตบางรุ่น เช่น Pixel Tablet คือแนวนอน อุปกรณ์อยู่ในแนวตามธรรมชาติเมื่อ Display#getRotation() การคืนสินค้า Surface.ROTATION_0 หากแอปคิดว่า ROTATION_0 เป็นแนวตั้ง เลย์เอาต์ของแอปและการแสดงตัวอย่างจากกล้องอาจไม่ตรงกับจอแสดงผลของอุปกรณ์
  • อุปกรณ์แบบพับได้แนวนอน: อุปกรณ์แบบพับได้บางรุ่น เช่น Pixel Fold อยู่ใน การวางแนวตั้งขึ้นเมื่อพับ แต่เป็นแนวนอนเมื่อกางออก หากแอปคิดว่าการวางแนวเมื่อกางออกเป็นแนวตั้ง ภาพกะพริบ มีแนวโน้มที่จะเกิดปัญหาวนซ้ำหรือเลย์เอาต์
  • โทรศัพท์ฝาพับแบบพับได้: โทรศัพท์ฝาพับที่กางออกมักอยู่ในแนวตั้ง การวางแนว แต่เมื่อพับ โทรศัพท์มักจะมีจอแสดงผลขนาดเล็กอยู่ใน แนวนอน แอปต้องระบุและรองรับ การวางแนวของจอแสดงผล

ปัญหาความเข้ากันได้ที่พบได้ทั่วไป

แอปพบปัญหาความเข้ากันได้บ่อยที่สุดเนื่องจากการวางแนวของแอป ข้อจำกัด ข้อจำกัดด้านขนาดและอัตราส่วน การจัดการที่ไม่ถูกต้อง การวางแนวการแสดงตัวอย่างของกล้อง และ API ที่ใช้ในทางที่ผิด

เล็ทเทอร์บ็อกซิง

แถบดำด้านบน-ล่างของภาพวางตำแหน่งแอป ตรงกลางหน้าจอหรือบนหน้าจอขนาดใหญ่ ไปด้านใดด้านหนึ่งเพื่อให้เข้าถึงได้ง่าย ด้าน (แถบสีทึบ หรือวอลเปเปอร์เบลอ) เติมเต็มพื้นที่แสดงผลที่ไม่ได้ใช้ตามด้านข้างหรือด้านบน และ ที่ด้านล่างของแอป

แถบดำด้านบน-ล่างของภาพเกิดขึ้นบนอุปกรณ์ที่มีหน้าจอขนาดใหญ่ เนื่องจากขนาดและ สัดส่วนภาพบนหน้าจอของอุปกรณ์มักจะแตกต่างจากอัตราส่วนมาตรฐาน ซึ่งแอปส่วนใหญ่ได้รับการออกแบบมาเป็นพิเศษ

รูปที่ 1 แอปที่ถูกจำกัดให้วางอยู่ในแนวตั้งมีแถบดำด้านบน-ล่างของภาพในแท็บเล็ตแนวนอนและพับได้

ปัญหา

แอปไม่ได้รองรับการกำหนดค่าการแสดงผลทั้งหมดเนื่องจากแอปได้รับการแก้ไขแล้ว การวางแนว สัดส่วนภาพคงที่ หรือไม่ปรับขนาดไม่ได้

การตั้งค่าการกำหนดค่าที่ควบคุมการวางแนวและความสามารถในการปรับขนาดของแอปประกอบด้วย ดังต่อไปนี้:

  • screenOrientation: ระบุการวางแนวคงที่สำหรับ แอป แอปยังตั้งการวางแนวขณะรันไทม์ได้โดยใช้ Activity#setRequestedOrientation()

  • resizeableActivity: ระบุว่าระบบสามารถ ปรับขนาดแอปให้พอดีกับหน้าต่างขนาดต่างๆ ใน Android 11 (ระดับ API 30) และต่ำกว่า ระบุว่าแอปรองรับโหมดหลายหน้าต่างหรือไม่ เปิด Android 12 (API ระดับ 31) ขึ้นไป ระบุว่าแอปรองรับหรือไม่ โหมดหลายหน้าต่างบนหน้าจอขนาดเล็ก (กะทัดรัด ขนาดหน้าต่าง) ใน Android 12 ขึ้นไป แอปต่างๆ รองรับโหมดหลายหน้าต่างในหน้าจอขนาดใหญ่ (หน้าต่างขนาดกลางหรือขยาย ขนาด) โดยไม่คำนึงถึงการตั้งค่านี้

  • maxAspectRatio: ระบุสัดส่วนภาพสูงสุด ที่แอปนี้รองรับ เฉพาะแอปที่ตั้งค่า resizeableActivity เป็น false ได้ ตั้งค่า maxAspectRatio

  • minAspectRatio: ระบุสัดส่วนภาพขั้นต่ำ ที่แอปนี้รองรับ เฉพาะแอปที่ตั้งค่า resizeableActivity เป็น false ได้ ตั้งค่า minAspectRatio

การเพิ่มประสิทธิภาพ

แอปควรรองรับอุปกรณ์และการแสดงผลในโหมดหลายหน้าต่างทั้งหมด การวางแนวและขนาดต่างๆ นำการวางแนวออกทั้งหมดและสัดส่วนภาพคงที่ จากเลย์เอาต์ของแอปและไฟล์ Manifest ของแอป

วิธีแก้ปัญหาความเข้ากันได้

หากแอปที่มีการวางแนวคงที่หรือสัดส่วนภาพคงที่ทำงานในหน้าต่างที่ แอปไม่สนับสนุนขนาดหรือการวางแนวหน้าต่างโดยตรง Android แถบดำด้านบน-ล่างของภาพในแอปเพื่อรักษาความต่อเนื่อง

เริ่มต้นด้วย Android 12 (API ระดับ 31) และทำต่อด้วย 12L (API ระดับ 32) แพลตฟอร์มดังกล่าวใช้การปรับปรุงหลายอย่างกับแอปที่มีแถบดำด้านบน-ล่างของภาพ อุปกรณ์ จะใช้การปรับปรุง UI คุณไม่จำเป็นต้องดำเนินการใดๆ เพิ่มเติม เพื่อให้แอปของคุณได้รับประโยชน์จากการปรับปรุง

Android 12 (API ระดับ 31) ขอแนะนำการเพิ่มประสิทธิภาพเพื่อความสวยงามต่อไปนี้ซึ่ง ที่ผู้ผลิตอุปกรณ์จะเป็นผู้กำหนดค่าได้ ดังนี้

  • มุมโค้งมน: มุมของหน้าต่างแอปดูกลมกลืนมากขึ้น
  • ความโปร่งใสของแถบระบบ: แถบสถานะและแถบนำทาง ซึ่งวางซ้อน เป็นแบบกึ่งโปร่งใส ทำให้ไอคอนบนแถบมองเห็นได้ตลอดเวลา พื้นหลังแถบดำด้านบน-ล่างของภาพ
  • สัดส่วนภาพที่กำหนดค่าได้: สัดส่วนภาพของแอปสามารถปรับได้ เพื่อปรับปรุงรูปลักษณ์ของแอป

รูปที่ 2 แอปที่มีแถบดำด้านบน-ล่างของภาพพร้อมการเพิ่มประสิทธิภาพ UI

12L (API ระดับ 32) เพิ่มการปรับปรุงฟังก์ชันต่อไปนี้

  • ตำแหน่งที่กำหนดค่าได้: ในอุปกรณ์ขนาดใหญ่ ผู้ผลิตอุปกรณ์จะทำสิ่งต่อไปนี้ได้ วางแอปไว้ทางซ้ายหรือขวาของจอแสดงผล ซึ่งทำให้ โต้ตอบได้ง่ายขึ้น

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

Android 13 (API ระดับ 33) เพิ่มกล่องโต้ตอบการให้ข้อมูลแก่ผู้ใช้เกี่ยวกับจุดยืนของ แอปมีแถบดำด้านบน-ล่างของภาพบนหน้าจอหรือการรวมแถบดำด้านบน-ล่างของภาพในโหมดแยกหน้าจอ

รูปที่ 3 แอปแบบมีแถบดำด้านบน-ล่างของภาพพร้อมกล่องโต้ตอบความรู้สำหรับผู้ใช้

โหมดความเข้ากันได้กับขนาด

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

การเปลี่ยนแปลงการกำหนดค่าอุปกรณ์ที่ทริกเกอร์โหมดความเข้ากันได้ของขนาดได้มีดังนี้ ดังต่อไปนี้

  • การหมุนอุปกรณ์
  • อุปกรณ์แบบพับได้ขณะพับหรือกางออก
  • เปลี่ยนระหว่างโหมดการแสดงผลแบบเต็มหน้าจอกับโหมดแยกหน้าจอ

ปัญหา

โดยทั่วไป โหมดความเข้ากันได้กับขนาดจะใช้กับกิจกรรมที่ถูกจำกัดใน การวางแนวหรืออัตราส่วนกว้างยาวและกำหนดค่า (หรือกำหนดโดยระบบ) เป็น และไม่สามารถปรับขนาดได้

แอปของคุณถือว่าปรับขนาดได้ และจะไม่วางในขนาด โหมดความเข้ากันได้ หากเป็นไปตามเกณฑ์ข้อใดข้อหนึ่งต่อไปนี้

หากแอปไม่เป็นไปตามเงื่อนไขใดๆ จะถือว่าไม่ ที่ปรับขนาดได้ และสามารถวางไว้ในโหมดความเข้ากันได้ของขนาด

การเพิ่มประสิทธิภาพ

แอปควรรองรับจอแสดงผลทุกขนาด ทำให้แอปของคุณปรับขนาดได้โดยการตั้งค่า แอตทริบิวต์ android:resizeableActivity ของ <activity> หรือ <application> ให้เป็น true ใน ไฟล์ Manifest ของแอป ออกแบบเลย์เอาต์ที่ปรับเปลี่ยนตามอุปกรณ์/ปรับเปลี่ยนได้สำหรับแอป สำหรับข้อมูลเพิ่มเติม ดูข้อมูลได้ที่ รองรับหน้าจอขนาดต่างๆ และการสนับสนุน โหมดหลายหน้าต่าง

วิธีแก้ปัญหาความเข้ากันได้

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

การกะพริบวนซ้ำ

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

ปัญหา

ใน Android 12 (API ระดับ 31) ขึ้นไป ผู้ผลิตอุปกรณ์สามารถกำหนดค่า อุปกรณ์ของตนเองให้ละเว้นข้อจำกัดด้านการวางแนวที่แอปกำหนด และแทนที่ด้วย บังคับใช้โหมดความเข้ากันได้ เช่น อุปกรณ์แบบพับได้อาจไม่สนใจ android:screenOrientation="portrait" ของกิจกรรม การตั้งค่าเมื่อกิจกรรมแสดง ในขนาดแท็บเล็ตแนวนอน หน้าจอด้านใน

หากไม่สนใจข้อจำกัดด้านการวางแนวของแอป แอปจะเขียนโปรแกรมได้แบบเป็นโปรแกรม กำหนดการวางแนวโดยการโทร Activity#setRequestedOrientation() การโทร ทริกเกอร์การรีสตาร์ทแอปหากแอปไม่ได้จัดการการเปลี่ยนแปลงการกำหนดค่า (โปรดดู จัดการการเปลี่ยนแปลงการกำหนดค่า) หลังจาก รีสตาร์ท, ระบบจะไม่สนใจข้อจํากัดการวางแนวของแอปอีกครั้ง, แอปจะทําซ้ำ การเรียกไปยัง setRequestedOrientation() การโทรจะทำให้แอปรีสตาร์ท และ ทำแบบนี้ไปเรื่อยๆ วนไปเรื่อยๆ

อีกวิธีหนึ่งที่คุณอาจพบคือ การวางแนวธรรมชาติ (การวางแนวปกติตาม ที่กำหนดโดย Android) ของหน้าจออุปกรณ์เป็นแนวนอน (กล่าวคือ การโทร Display#getRotation() ส่งคืนแล้ว Surface.ROTATION_0 ในขณะที่อุปกรณ์แสดงแนวนอน ทั้งหมด) ที่ผ่านมา แอปมีการสันนิษฐานว่า Display.getRotation() = Surface.ROTATION_0 หมายถึงอุปกรณ์อยู่ในแนวตั้ง แต่กลับไม่เป็นเช่นนั้น เป็นเช่นนี้เสมอ เช่น ในหน้าจอด้านในของอุปกรณ์แบบพับได้บางส่วนและ ในแท็บเล็ตบางรุ่น

แอปที่มีการวางแนวแบบแนวนอนบนอุปกรณ์แสดงผลด้านในแบบพับได้อาจตรวจสอบ การหมุนหน้าจอ รับค่า ROTATION_0 คาดเดาการวางแนวธรรมชาติ ของอุปกรณ์เป็นแนวตั้งและเรียก setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT ) เพื่อกำหนดค่าการจัดวางแอปใหม่ หลังจากที่แอปรีสตาร์ท (แนวนอน การวางแนว) ก็อาจตรวจสอบการหมุนหน้าจออีกครั้ง ได้รับค่า ROTATION_0 โทร setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT) และ ก็เล่นต่อไปเรื่อยๆ ไม่รู้จบ

การเพิ่มประสิทธิภาพ

แอปควรไม่ทำสิ่งต่อไปนี้

  • ตั้งค่าการวางแนวเริ่มต้นด้วย Activity#setRequestedOrientation() ในส่วน กิจกรรม onCreate() เนื่องจากคำขอการวางแนวสามารถ ทริกเกอร์โดยการเปลี่ยนแปลงการกำหนดค่าที่ไม่มีการจัดการโดยไม่คาดคิด
  • สมมติว่าการวางแนวตามธรรมชาติของอุปกรณ์ (ROTATION_0) เป็นแนวตั้ง
  • ตั้งค่าการวางแนวตามสัญญาณที่ไม่เกี่ยวข้องกับขนาดหน้าต่างปัจจุบัน เช่น ในชื่อ Display#getRotation(), มี FoldingFeature หรือ API ที่เลิกใช้งานแล้ว

วิธีแก้ปัญหาความเข้ากันได้

Android ไม่สนใจสายที่โทรไปยัง Activity#setRequestedOrientation() ในเงื่อนไขต่อไปนี้ สถานการณ์:

  • กิจกรรมได้เปิดอีกครั้งแล้วจากการเรียกก่อนหน้าไปยังเมธอด หรือ มีการเปิดใช้การดูแลการหมุนสำหรับกล้อง (โปรดดูส่วนกล้อง) ดูตัวอย่างด้านล่าง)

    ผู้ผลิตอุปกรณ์สามารถนำลักษณะการทำงานนี้ไปใช้กับแอปที่มี OVERRIDE_ENABLE_COMPAT_IGNORE_REQUESTED_ORIENTATION

  • กิจกรรมนี้ส่งคำขอการวางแนวมากกว่า 2 ครั้งใน 1 วินาที บ่งชี้ว่ามีการวนซ้ำ จากคำขอ 2 รายการที่วนซ้ำ Android ใช้ ส่วนขยายที่ช่วยขยายพื้นที่แสดงผลแอปให้ได้สูงสุด

    ผู้ผลิตอุปกรณ์สามารถนำลักษณะการทำงานนี้ไปใช้กับแอปที่มี OVERRIDE_ENABLE_COMPAT_IGNORE_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED

แสดงตัวอย่างจากกล้องถ่ายรูป

ภาพตัวอย่างจากกล้อง (หรือช่องมองภาพ) ของแอปกล้องอาจวางไม่ตรงหรือบิดเบี้ยว บนแท็บเล็ต แล็ปท็อป และจอแสดงผลแบบพับได้

ปัญหา

เอกสารข้อกำหนดความเข้ากันได้ของ Android ระบุว่า เซ็นเซอร์รูปภาพของกล้อง "ต้องวางในแนวเดียวเพื่อให้ด้านยาวของกล้อง จะอยู่ในแนวเดียวกับขนาดยาวของหน้าจอ"

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

การเริ่มกิจกรรมโดยใช้การวางแนวกล้องที่แอปไม่ได้คาดไว้ หรือ การสลับระหว่างกล้องหรือหน้าจออุปกรณ์ต่างๆ (สำหรับอุปกรณ์แบบพับได้) อาจทำให้ ภาพตัวอย่างจากกล้องผิดตำแหน่งหรือบิดเบี้ยว

การเพิ่มประสิทธิภาพ

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

วิธีแก้ปัญหาความเข้ากันได้

วางอุปกรณ์ให้อยู่ในแนวปกติเมื่อDisplay#getRotation() การคืนสินค้า Surface.ROTATION_0 ระบบจะคำนวณ CameraCharacteristics.SENSOR_ORIENTATION จากการวางแนวตามปกติของอุปกรณ์ Android ปรับแนวหน้าต่างแนวตั้งของ แอปที่จำกัดแนวตั้ง ซึ่งมีการวางแนวตามธรรมชาติของอุปกรณ์ เป็นสิ่งที่แอปส่วนใหญ่คาดหวัง Android ยังครอบตัดรูปภาพเซ็นเซอร์ของกล้องเมื่อ การวางแนวเซ็นเซอร์จะเป็นแนวนอนและการแสดงตัวอย่างของกล้องจะเป็นแนวตั้ง ฟิลด์ วิธีแก้ปัญหาเบื้องต้นมีดังนี้

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

    เมื่อเชื่อมต่อแอปที่จำกัดภาพในแนวตั้งกับกล้อง Android จะบังคับ หมุนแอปเพื่อจัดหน้าต่างแนวตั้งของแอปให้ตรงกับธรรมชาติ การวางแนวของอุปกรณ์

    ในแท็บเล็ตบางรุ่น (ดูอุปกรณ์อ้างอิง) แอป หน้าต่างแนวตั้งจะหมุนเป็นแนวตั้งแบบเต็มหน้าจอเพื่อให้สอดคล้องกับ การวางแนวตามธรรมชาติของอุปกรณ์ แอปจะแสดงเต็มหน้าจอหลังจากบังคับใช้ การหมุน

    บนหน้าจอแนวนอนด้านในของอุปกรณ์แบบพับได้ (ดูข้อมูลอ้างอิง อุปกรณ์) กิจกรรมแนวตั้งเท่านั้นจะหมุนเป็น เพื่อปรับแนวตามธรรมชาติที่กางออก แอปนี้ มีแถบดำด้านบน-ล่างของภาพหลังจากหมุนแรง

  • การครอบตัดกล้องหน้าด้านใน: เซ็นเซอร์กล้องหน้าด้านในของบาง อุปกรณ์แบบพับได้วางอยู่ในแนวนอน นอกจากการบังคับให้หมุน ตัวอย่างจากกล้องบนจอแสดงผลด้านในแบบพับได้ Android จะครอบตัดด้านหน้าภายใน (แนวนอน) ขอบเขตการมองเห็นของกล้อง เพื่อให้เซ็นเซอร์จับภาพในฝั่งตรงกันข้าม การวางแนวของอุปกรณ์

  • บังคับให้รีเฟรชตัวอย่างจากกล้อง: ระบบจะหมุนเวียนกิจกรรม เมธอด onStop() และ onStart() (โดยค่าเริ่มต้น) หรือ onPause() และ onResume() (มีผลโดย OVERRIDE_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE ต่อแอป) หลังจากบังคับให้หมุน เพื่อให้แน่ใจว่าตัวอย่างจากกล้อง อย่างเหมาะสม

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

นักพัฒนาแอปสามารถลบล้างวิธีแก้ปัญหาเบื้องต้นเหล่านี้ได้หากแอปจัดการการแสดงตัวอย่างผ่านกล้อง อย่างถูกต้อง ดูการลบล้างต่อแอป

API ที่ใช้บ่อยในแบบต่างๆ

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

API ของ View บางรายการได้รับการออกแบบมาเพื่อวัตถุประสงค์พิเศษที่อาจไม่เหมาะกับธุรกิจเสมอไป ที่นักพัฒนาซอฟต์แวร์เข้าใจ

ปัญหา

นักพัฒนาแอปยังคงใช้ API ของ Display ที่เลิกใช้งานแล้วต่อไปและสันนิษฐานว่า API จะแสดงผลขอบเขตของแอปแทนขอบเขตพื้นที่แสดงผลของอุปกรณ์ หรือนักพัฒนาซอฟต์แวร์ ใช้ API มุมมองสำหรับวัตถุประสงค์พิเศษโดยไม่ได้ตั้งใจในการรับเมตริกการแสดงผลทั่วไป ผลที่ได้คือการคำนวณผิดพลาดเมื่อเปลี่ยนตำแหน่งองค์ประกอบ UI หลังหน้าต่างแอป การปรับขนาดเหตุการณ์ที่ก่อให้เกิดปัญหาเกี่ยวกับเลย์เอาต์

Display API ที่เลิกใช้งานแล้วและใช้ในทางที่ผิด:

สำหรับข้อมูลเพิ่มเติม โปรดดู รองรับโหมดหลายหน้าต่าง

API มุมมองที่ใช้ในทางที่ผิด:

การเพิ่มประสิทธิภาพ

อย่าพึ่งพาขนาดการแสดงผลจริงในการวางตำแหน่งองค์ประกอบ UI ย้ายข้อมูล ไปยัง API ที่อิงตาม WindowMetrics ซึ่งรวมถึงรายการต่อไปนี้ WindowManager API:

วิธีแก้ปัญหาความเข้ากันได้

การลบล้าง 2 รายการจะปรับ API ของ Display ที่เลิกใช้งานแล้ว และใช้ API View รายการในทางที่ผิดเพื่อ แสดงผลขอบเขตของแอป: ALWAYS_SANDBOX_DISPLAY_APIS สำหรับ Display API; OVERRIDE_SANDBOX_VIEW_BOUNDS_APIS สำหรับ View API ระบบจะใช้ ALWAYS_SANDBOX_DISPLAY_APIS โดยค่าเริ่มต้นกับ แอปที่มีคุณสมบัติเหมาะสมสำหรับโหมดความเข้ากันได้กับขนาด

กิจกรรมที่โปร่งใส

กิจกรรมที่โปร่งใสนั้นเป็นผลมาจากรูปแบบพื้นหลังโปร่งใส ตัวอย่าง:

<style name="Transparent" parent="AppTheme">
    <item name="android:windowIsTranslucent">true</item>
    <item name="android:windowBackground">@android:color/transparent</item>
</style>

ธีมที่เกี่ยวข้องกับกล่องโต้ตอบ เช่น Theme.MaterialComponents.Dialog สามารถ ใช้สไตล์ที่ทำให้กิจกรรมมีความโปร่งใส

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

ปัญหา

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

การเพิ่มประสิทธิภาพ

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

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

แอปควรส่งคำขอสิทธิ์จากกิจกรรมที่ยังเหลืออยู่ ปรากฏจนกว่าผู้ใช้จะตัดสินใจอนุญาต

มุมโค้งมน

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

กล่องโต้ตอบสิทธิ์ไม่เต็มพื้นที่แสดงผลที่มีอยู่เนื่องจากกล่องโต้ตอบ โดยปกติจะใช้ LayoutParams.WRAP_CONTENT มากกว่า LayoutParams.MATCH_PARENT

วิธีแก้ปัญหาความเข้ากันได้

แสดงกิจกรรมที่เปิดกิจกรรมในกล่องโต้ตอบไว้จนกว่าผู้ใช้จะ ตอบกลับกล่องโต้ตอบแล้ว

ระบบจะดูแลให้กิจกรรมที่โปร่งใสได้รับข้อจำกัดทั้งหมดจาก กิจกรรมแรกที่ทึบแสงใต้กิจกรรมที่โปร่งใสในกลุ่มกิจกรรม รวมถึงข้อจำกัดที่เกี่ยวข้องกับสิ่งต่อไปนี้

  • โหมดความเข้ากันได้กับขนาด
  • การวางแนว
  • สัดส่วนภาพ

เกม Unity

เกม Unity จะทำงานในโหมดเต็มหน้าจอของ Android หรือในโหมดหลายหน้าต่าง อย่างไรก็ตาม เกม Unity หลายเกมเสียสมาธิและหยุดวาดเนื้อหาเมื่อวางแอป โหมดหลายหน้าต่าง

ปัญหา

Unity ได้เพิ่ม Resizable Window ใน Unity 2019.4 เพื่อรองรับโหมดหลายหน้าต่างใน Android อย่างไรก็ตาม การติดตั้งใช้งานเริ่มต้นไม่ตอบสนองต่อวงจรของกิจกรรมใน โหมดหลายหน้าต่างอย่างถูกต้อง ซึ่งทำให้ UnityPlayer เพื่อระงับการเล่นเมื่อแอปหลุดโฟกัส โปรแกรมเล่นแสดงผล หน้าจอสีดำหรือเฟรมสุดท้ายของเกมที่ค้าง เกมเพลย์จะกลับมาทำงานอีกครั้งเมื่อ ผู้ใช้แตะหน้าจอ แอปจำนวนมากที่ใช้เครื่องมือ Unity พบปัญหานี้และ แสดงผลเป็นหน้าต่างสีดำในโหมดหลายหน้าต่าง

การเพิ่มประสิทธิภาพ

อัปเกรด Unity เป็น 2019.4.40 ขึ้นไปและส่งออกเกมอีกครั้ง เก็บ ตัวเลือก Resizable Window เช็คอินใน การตั้งค่าโปรแกรมเล่น Android มิฉะนั้น เกมจะหยุดชั่วคราวเมื่อไม่ได้อยู่ในโฟกัสแม้ว่าเกมจะมองเห็น โหมดหลายหน้าต่าง

วิธีแก้ปัญหาความเข้ากันได้

ผู้ผลิตอุปกรณ์สามารถใช้ OVERRIDE_ENABLE_COMPAT_FAKE_FOCUS ลบล้างต่อแอปเพื่อระบุกิจกรรมโฟกัสปลอมให้แก่แอปใน โหมดหลายหน้าต่าง การลบล้างจะทำให้กิจกรรมดึงเนื้อหาและ ห้ามปิดทับ

ทดสอบแอปเพื่อดูปัญหาด้านความเข้ากันได้

หากต้องการทดสอบแอปและทำความเข้าใจลักษณะการทำงานในอุปกรณ์รูปแบบต่างๆ ให้ใช้ จากแหล่งข้อมูลต่อไปนี้

มีแถบดำด้านบน-ล่างของภาพ

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

Kotlin

fun Activity.isLetterboxed() : Boolean {
    if (isInMultiWindowMode) return false

    val wmc = WindowMetricsCalculator.getOrCreate()
    val currentBounds = wmc.computeCurrentWindowMetrics(this).bounds
    val maxBounds = wmc.computeMaximumWindowMetrics(this).bounds

    val isScreenPortrait = maxBounds.height() > maxBounds.width()

    return if (isScreenPortrait) {
        currentBounds.height() < maxBounds.height()
    } else {
        currentBounds.width() < maxBounds.width()
    }
}

Java

public boolean isLetterboxed(Activity activity) {
    if (activity.isInMultiWindowMode()) {
        return false;
    }

    WindowMetricsCalculator wmc = WindowMetricsCalculator.getOrCreate();
    Rect currentBounds = wmc.computeCurrentWindowMetrics(activity).getBounds()
    Rect maxBounds = wmc.computeMaximumWindowMetrics(activity).getBounds();

    boolean isScreenPortrait = maxBounds.height() > maxBounds.width();

    return (isScreenPortrait)
        ? currentBounds.height() < maxBounds.height()
        : currentBounds.width() < maxBounds.width();
}

จากนั้นทำการทดสอบเพื่อยืนยันพฤติกรรมและตรวจสอบว่ากิจกรรมเป้าหมายไม่ใช่ มีแถบดำด้านบน-ล่างของภาพ:

Kotlin

@get:Rule
val activityRule = ActivityScenarioRule(MainActivity::class.java)

@Test
fun activity_launched_notLetterBoxed() {
    activityRule.scenario.onActivity {
        assertThat(it.isLetterboxed()).isFalse()
    }
}

Java

@Rule
public ActivityScenarioRule<MainActivity> rule = new ActivityScenarioRule<>(MainActivity.class);

public void activity_launched_notLetterBoxed() {
    try (ActivityScenario<MainActivity> scenario = ActivityScenario.launch(MainActivity.class)) {
        scenario.onActivity(activity -> {
            assertThat(isLetterboxed(activity)).isFalse();
        });
    }
}

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

การลบล้างต่อแอป

Android ให้การลบล้างที่เปลี่ยนลักษณะการทำงานที่กำหนดค่าไว้ของแอป สำหรับ ตัวอย่างเช่น การลบล้าง FORCE_RESIZE_APP จะกำหนด ระบบข้ามโหมดความเข้ากันได้ของขนาดและปรับขนาดแอปให้พอดีกับจอแสดงผล มิติข้อมูลแม้ว่า resizeableActivity="false" จะเป็น ที่ระบุในไฟล์ Manifest ของแอป

ผู้ผลิตอุปกรณ์จะใช้การลบล้างกับบางแอปหรือทุกแอป อุปกรณ์ที่มีหน้าจอขนาดใหญ่โดยเฉพาะ ใน Android 14 (API ระดับ 34) ขึ้นไป ผู้ใช้ สามารถใช้การลบล้างกับแอปผ่านการตั้งค่าอุปกรณ์ได้

การลบล้างผู้ใช้ต่อแอป

ใน Android 14 ขึ้นไป เมนูการตั้งค่าช่วยให้ผู้ใช้เปลี่ยนมุมมองได้ อัตราส่วนแอปมากขึ้น อุปกรณ์ที่มีหน้าจอขนาดใหญ่ เช่น แหล่งอ้างอิง อุปกรณ์จะใช้เมนู

เมนูจะมีรายการแอปทั้งหมดที่ติดตั้งในอุปกรณ์ ผู้ใช้เลือก แล้วตั้งค่าสัดส่วนภาพของแอปเป็น 3:4, 1:1, เต็มหน้าจอ หรือค่าอื่นๆ กำหนดค่าโดยผู้ผลิตอุปกรณ์ ผู้ใช้ยังสามารถรีเซ็ตสัดส่วนภาพเป็น ค่าเริ่มต้นของแอป ซึ่งระบุไว้ในไฟล์ Manifest ของแอป

แอปสามารถเลือกไม่ใช้การลบล้างความเข้ากันได้ได้โดยการตั้งค่าแท็ก PackageManager.Property ต่อไปนี้

  • PROPERTY_COMPAT_ALLOW_USER_ASPECT_RATIO_OVERRIDE

    หากต้องการเลือกไม่ใช้การลบล้างความเข้ากันได้ของสัดส่วนภาพของผู้ใช้ ให้เพิ่มพร็อพเพอร์ตี้ ลงในไฟล์ Manifest ของแอปและตั้งค่าเป็น false ดังนี้

    <application>
        <property
            android:name="android.window.
            PROPERTY_COMPAT_ALLOW_USER_ASPECT_RATIO_OVERRIDE"
            android:value="false" />
    </application>
    

    แอปของคุณจะถูกยกเว้นจากรายการแอปในการตั้งค่าอุปกรณ์ ผู้ใช้ จะไม่สามารถลบล้างสัดส่วนภาพของแอปได้

    การตั้งค่าพร็อพเพอร์ตี้เป็น true จะไม่มีผล

  • PROPERTY_COMPAT_ALLOW_USER_ASPECT_RATIO_FULLSCREEN_OVERRIDE

    หากต้องการเลือกไม่ใช้ตัวเลือกแบบเต็มหน้าจอสำหรับความเข้ากันได้ของสัดส่วนภาพของผู้ใช้ ลบล้าง ให้เพิ่มพร็อพเพอร์ตี้ลงในไฟล์ Manifest ของแอปแล้วตั้งค่าเป็น false:

    <application>
        <property
            android:name="android.window.PROPERTY_COMPAT_ALLOW_USER_ASPECT_RATIO_FULLSCREEN_OVERRIDE"
            android:value="false" />
    </application>
    

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

    การตั้งค่าพร็อพเพอร์ตี้นี้เป็น true จะไม่มีผล

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

การลบล้างผู้ผลิตอุปกรณ์ต่อแอป

ผู้ผลิตอุปกรณ์จะใช้การลบล้างเป็นรายแอปในอุปกรณ์ที่เลือก อุปกรณ์อ้างอิงอาจใช้การลบล้างบางอย่างกับ แอปที่หลากหลายโดยค่าเริ่มต้น

แอปสามารถเลือกไม่ใช้การลบล้างส่วนใหญ่ได้ (โปรดดูหัวข้อต่อแอป แทนตารางด้านล่าง)

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

คุณยังสามารถใช้ Android Debug Bridge (adb) เพื่อเปิดใช้หรือ ปิดใช้การลบล้างและดูว่าการลบล้างใดมีผลกับแอปของคุณ

วิธีเปิดหรือปิดใช้การลบล้าง

adb shell am compat enable/disable <override name/id> <package>

สําหรับอุปกรณ์อ้างอิง ให้ตรวจสอบว่าการลบล้างใดมีผลกับ แอปของคุณ

adb shell dumpsys platform_compat | grep <package name>

ตารางต่อไปนี้แสดงรายการการลบล้างที่มีอยู่ รวมถึงคําแนะนําเกี่ยวกับวิธี เพิ่มประสิทธิภาพแอปเพื่อให้แอปไม่ต้องใช้การลบล้าง คุณสามารถเพิ่ม พร็อพเพอร์ตี้ Flag ไปยังไฟล์ Manifest ของแอปเพื่อเลือกไม่ใช้การลบล้างบางรายการ

การลบล้างต่อแอป
ประเภท ชื่อ รหัส คำอธิบาย
ความสามารถในการปรับขนาด ปรับขนาดแอปฟอร์ซ 174042936 ข้ามโหมดความเข้ากันได้กับขนาดสำหรับแอปเมื่อเปลี่ยนแปลงการกำหนดค่า
บังคับไม่ปรับขนาดแอป 181136395 บังคับให้แอปเข้าสู่โหมดความเข้ากันได้กับขนาดเมื่อเปลี่ยนแปลงการกำหนดค่า
สัดส่วนภาพ OVERRIDE_MIN_ASPECT_RATIO 174042980 การลบล้างผู้รับอนุญาตที่ต้องเปิดใช้เพื่อใช้การลบล้างสัดส่วนภาพอื่นๆ
OVERRIDE_MIN_ASPECT_RATIO_PORTRAIT_ONLY 203647190 หากเปิดใช้ (ค่าเริ่มต้น) ขีดจำกัดจะลบล้างขอบเขตกิจกรรมแนวตั้งเท่านั้น
OVERRIDE_MIN_ASPECT_RATIO_MEDIUM 180326845 เปลี่ยนสัดส่วนภาพขั้นต่ำเป็น 3:2
OVERRIDE_MIN_ASPECT_RATIO_LARGE 180326787 เปลี่ยนสัดส่วนภาพขั้นต่ำเป็น 16:9
OVERRIDE_MIN_ASPECT_RATIO_TO_ALIGN_WITH_SPLIT_SCREEN 208648326 เปลี่ยนสัดส่วนภาพขั้นต่ำให้พอดีกับขนาดการแสดงผล 50% (หรือสัดส่วนภาพแยกหน้าจอ)
OVERRIDE_MIN_ASPECT_RATIO_EXCLUDE_PORTRAIT_FULLSCREEN 218959984 ปิดใช้การลบล้างสัดส่วนภาพขั้นต่ำเพื่อให้แอปแสดงเต็มหน้าจอเมื่ออุปกรณ์อยู่ในแนวตั้ง
การวางแนว โอเวอร์ไรด์_ตำแหน่งใดๆ 265464455 เปิดใช้การลบล้างการวางแนวทั้งหมด
OVERRIDE_ORIENTATION_TO_USER 310816437 ลบล้างข้อจำกัดการวางแนว ความสามารถในการปรับขนาด และสัดส่วนภาพ
OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT 265452344 ลบล้างการวางแนวให้เป็นแนวตั้งเมื่อกิจกรรมมีการวางแนวที่ไม่ได้กำหนด
OVERRIDE_UNDEFINED_ORIENTATION_TO_NOSENSOR 265451093 ลบล้างการวางแนวเป็น nosensor (ใช้การวางแนวธรรมชาติของอุปกรณ์) เมื่อกิจกรรมมีการวางแนวที่ไม่ได้กำหนด
OVERRIDE_LANDSCAPE_ORIENTATION_TO_REVERSE_LANDSCAPE 266124927 หมุนแอปในแนวนอนเท่านั้น 180 องศา
OVERRIDE_ORIENTATION_ONLY_FOR_CAMERA 265456536 จำกัดขอบเขตการลบล้างการวางแนวเมื่อแอปเชื่อมต่อกับกล้อง
OVERRIDE_USE_DISPLAY_LANDSCAPE_NATURAL_ORIENTATION 255940284 ตั้งการแสดงผลให้เป็นแนวนอนแบบแนวนอนแบบคงที่เมื่องานแสดงเต็มหน้าจอ (รวมถึงแบบมีแถบดำด้านบน-ล่างของภาพ)
OVERRIDE_ENABLE_COMPAT_IGNORE_REQUESTED_ORIENTATION 254631730 ไม่สนใจคำขอการวางแนวจากแอปเพื่อไม่ให้เกิดการวนซ้ำที่ไม่สิ้นสุดในการหมุน
OVERRIDE_ENABLE_COMPAT_IGNORE_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED 273509367 ไม่สนใจคำขอการวางแนวซ้ำขณะเปิดกิจกรรมอีกครั้ง หาก Android ตรวจพบว่าแอปขอการวางแนวใหม่อย่างน้อย 2 การวางแนวภายใน 1 วินาที ระบบจะถือว่าเป็นการหมุนวนลูปและใช้การลบล้าง
OVERRIDE_RESPECT_REQUESTED_ORIENTATION 236283604 ป้องกันไม่ให้มีแถบดำด้านบน-ล่างของภาพโดยการไม่อนุญาตให้ผู้ผลิตอุปกรณ์ละเว้นการตั้งค่าคำขอการวางแนว
Sandbox API NEVER_SANDBOX_DISPLAY_APIS 184838306 ป้องกันการเปลี่ยนลักษณะการทำงานของ API การแสดงผล
ALWAYS_SANDBOX_DISPLAY_APIS 185004937 บังคับให้ Display API ในแอปแสดงผลขอบเขตของแอป Display API จะแสดงผลขอบเขตพื้นที่แสดงผลเชิงตรรกะ แต่บางครั้งแอปจะถือว่า Display API แสดงผลขอบเขตของแอป ซึ่งทำให้เกิดปัญหากับ UI
OVERRIDE_SANDBOX_VIEW_BOUNDS_APIS 237531167 บังคับให้ View API ที่ใช้ในแอปแสดงผลขอบเขตของแอป View API จะแสดงผลขอบเขตพื้นที่แสดงผลเชิงตรรกะ แต่บางครั้งแอปจะถือว่า View API แสดงผลขอบเขตของแอป ซึ่งทำให้เกิดปัญหากับ UI
ใช้ร่วมกับกล้องได้ OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION 263959004 ปิดการบังคับหมุน โดยค่าเริ่มต้น แอปกล้องที่มีการวางแนวคงที่ทั้งหมดจะถูกบังคับให้หมุนเมื่อเปิดการแสดงตัวอย่างของกล้อง
OVERRIDE_CAMERA_COMPAT_DISABLE_REFRESH 264304459 นำการรีเฟรชถาวรเริ่มต้นออกเมื่อบังคับให้หมุนการแสดงตัวอย่างจากกล้อง
OVERRIDE_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE 264301586 เปลี่ยนการรีเฟรชใหม่ทั้งหมดเป็น ซอฟต์รีเฟรช เมื่อมีการบังคับหมุนตัวอย่างของกล้อง ซึ่งช่วยรักษาสถานะระหว่างการหมุนแรง โดยค่าเริ่มต้น Android จะใช้การรีเฟรชใหม่ทั้งหมดเมื่อบังคับให้หมุนการแสดงตัวอย่างของกล้อง การรีเฟรชใหม่ทั้งหมดอาจก่อให้เกิดปัญหาแอปสูญเสียสถานะหรือดับไป ทั้งนี้ขึ้นอยู่กับวิธีที่แอปแคชสถานะก่อนหน้าไว้
OVERRIDE_CAMERA_LANDSCAPE_TO_PORTRAIT 250678880 ครอบตัดบัฟเฟอร์รูปภาพของกล้องหน้าด้านใน หากปิดใช้การลบล้าง ระบบจะนำการครอบตัดกล้องหน้าด้านในออกและเพิ่มขอบเขตการมองเห็นการแสดงตัวอย่างของกล้อง โดยค่าเริ่มต้นในอุปกรณ์แบบพับได้บางรุ่น (ดูอุปกรณ์อ้างอิง) ระบบจะครอบตัดตัวอย่างจากกล้องของแอปกล้องทั้งหมดเมื่อใช้กล้องหน้าด้านใน
เบ็ดเตล็ด OVERRIDE_ENABLE_COMPAT_FAKE_FOCUS 263259275 ป้องกันไม่ให้แอปดับเมื่อแอปหลุดโฟกัสในโหมดแยกหน้าจอ แอปรอให้มีโฟกัสก่อนวาดเนื้อหาแอป ซึ่งอาจทำให้แอปค้างหรือถูกปิด การลบล้างทำให้ Android ส่งเหตุการณ์โฟกัสปลอมไปยังแอปได้ ซึ่งจะส่งสัญญาณให้แอปเริ่มวาดเนื้อหาอีกครั้ง

ปรับขนาดแอป

บังคับให้แพ็กเกจที่ใช้การลบล้างปรับขนาดได้ ไม่ได้ เปลี่ยนว่าจะให้แอปอยู่ในโหมดหลายหน้าต่างหรือไม่ แต่จะอนุญาตให้ เพื่อปรับขนาดโดยไม่ต้องเข้าสู่โหมดความเข้ากันได้ของขนาดเมื่อปรับขนาดหน้าจอ

วิธีที่แอปจะได้รับผลลัพธ์เดียวกันกับการลบล้าง

ในไฟล์ Manifest ของแอป ให้ตั้งค่า android:resizeableActivity แอตทริบิวต์เป็น true หรือ เป็น สนับสนุนการปรับขนาดขณะปิดใช้งานโหมดหลายหน้าต่างด้วย android:resizeableActivity=false ตั้งค่า android.supports_size_changes การแจ้งข้อมูลเมตาไปยัง true

วิธีเพิ่มประสิทธิภาพแอป

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

วิธีปิดใช้หรือเลือกไม่ใช้การลบล้าง

ตั้งค่าสถานะพร็อพเพอร์ตี้ PROPERTY_COMPAT_ALLOW_RESIZEABLE_ACTIVITY_OVERRIDES เป็น false

แฟล็กพร็อพเพอร์ตี้ที่จะปรับการลบล้าง

<property android:name="android.window.PROPERTY_COMPAT_ALLOW_RESIZEABLE_ACTIVITY_OVERRIDES"
  android:value="true|false"/>

คำสั่ง adb ที่จะทดสอบการลบล้าง

วิธีใช้การลบล้างและทำให้แอปปรับขนาดได้

adb shell am compat enable FORCE_RESIZE_APP <package>

วิธีนําการลบล้างออก

adb shell am compat disable FORCE_RESIZE_APP <package>

หมายเหตุ: คําสั่งจะใช้ชั่วคราวหรือนำการลบล้างออกเท่านั้น

จำนวนแอปที่ไม่ปรับขนาด

บังคับให้แพ็กเกจที่ใช้การลบล้างไม่สามารถปรับขนาดได้และ เข้าสู่โหมดความเข้ากันได้ของขนาดเมื่อเปลี่ยนแปลงการกําหนดค่า

วิธีที่แอปจะได้รับผลลัพธ์เดียวกันกับการลบล้าง

ตั้งค่าทั้งแอตทริบิวต์ android:resizeableActivity และ การแจ้งข้อมูลเมตา android.supports_size_changes เป็น false ในไฟล์ Manifest ของแอป และประกาศการจำกัดการวางแนวหรืออัตราส่วน

วิธีเพิ่มประสิทธิภาพแอป

แอปทั้งหมดที่ทํางานได้ดีหากมีการปรับขนาดควรมี ตั้งค่า android:resizeableActivity หรือ android.supports_size_changes เป็น true ควรปรับปรุงแอปอื่นๆ ให้ทำงานได้อย่างดีเมื่อปรับขนาด โปรดดู android:resizeableActivity

วิธีปิดใช้หรือเลือกไม่ใช้การลบล้าง

ตั้งค่าสถานะพร็อพเพอร์ตี้ PROPERTY_COMPAT_ALLOW_RESIZEABLE_ACTIVITY_OVERRIDES เป็น false

แฟล็กพร็อพเพอร์ตี้ที่จะปรับการลบล้าง

<property android:name="android.window.PROPERTY_COMPAT_ALLOW_RESIZEABLE_ACTIVITY_OVERRIDES"
  android:value="true|false"/>

คำสั่ง adb ที่จะทดสอบการลบล้าง

วิธีใช้การลบล้างและทำให้แอปปรับขนาดไม่ได้

adb shell am compat enable FORCE_NON_RESIZE_APP <package>

วิธีนําการลบล้างออก

adb shell am compat disable FORCE_NON_RESIZE_APP <package>

หมายเหตุ: คําสั่งจะใช้ชั่วคราวหรือนำการลบล้างออกเท่านั้น

OVERRIDE_MIN_ASPECT_RATIO

ตัวป้องกันสำหรับการลบล้างทั้งหมดที่บังคับสัดส่วนภาพขั้นต่ำที่กำหนด

วิธีที่แอปจะได้รับผลลัพธ์เดียวกันกับการลบล้าง

ตั้งค่า android:minAspectRatio ที่ระดับกิจกรรมหรือแอป

วิธีเพิ่มประสิทธิภาพแอป

อย่าตั้งค่าการจำกัดสัดส่วนภาพในแอป ตรวจสอบว่าแอปของคุณรองรับ ที่มีหน้าจอหลายขนาด ใช้คลาสขนาดหน้าต่าง เพื่อให้รองรับเลย์เอาต์ที่แตกต่างกัน โดยอิงตามขนาดพื้นที่ที่แอปมีใน บนหน้าจอ ดู Compose WindowSizeClass API และ View WindowSizeClass API

วิธีปิดใช้หรือเลือกไม่ใช้การลบล้าง

ระบุข้อจำกัดสัดส่วนภาพหรือตั้งค่าแฟล็กพร็อพเพอร์ตี้ PROPERTY_COMPAT_ALLOW_MIN_ASPECT_RATIO_OVERRIDE ไปยัง false

แฟล็กพร็อพเพอร์ตี้ที่จะปรับการลบล้าง

<property android:name="android.window.PROPERTY_COMPAT_ALLOW_MIN_ASPECT_RATIO_OVERRIDE"
  android:value="false"/>

คำสั่ง adb ที่จะทดสอบการลบล้าง

วิธีใช้การลบล้าง

adb shell am compat enable OVERRIDE_MIN_ASPECT_RATIO <package>

วิธีนําการลบล้างออก

adb shell am compat disable OVERRIDE_MIN_ASPECT_RATIO <package>

หมายเหตุ: คําสั่งจะใช้ชั่วคราวหรือนำการลบล้างออกเท่านั้น

OVERRIDE_MIN_ASPECT_RATIO_PORTRAIT_เท่านั้น

จำกัดการตั้งค่าแอปที่บังคับใช้สัดส่วนภาพขั้นต่ำที่กำหนดสำหรับกิจกรรม ในแนวตั้งเท่านั้น เปิดใช้โดยค่าเริ่มต้นและจะมีผลเท่านั้น หากเปิดใช้ OVERRIDE_MIN_ASPECT_RATIO ด้วย

วิธีที่แอปจะได้รับผลลัพธ์เดียวกันกับการลบล้าง

โปรดดู OVERRIDE_MIN_ASPECT_RATIO

วิธีเพิ่มประสิทธิภาพแอป

โปรดดู OVERRIDE_MIN_ASPECT_RATIO

วิธีปิดใช้หรือเลือกไม่ใช้การลบล้าง

โปรดดู OVERRIDE_MIN_ASPECT_RATIO

แฟล็กพร็อพเพอร์ตี้ที่จะปรับการลบล้าง

โปรดดู OVERRIDE_MIN_ASPECT_RATIO

คำสั่ง adb ที่จะทดสอบการลบล้าง

วิธีใช้การลบล้าง

adb shell am compat enable OVERRIDE_MIN_ASPECT_RATIO_PORTRAIT_ONLY <package>

วิธีนําการลบล้างออก

adb shell am compat disable OVERRIDE_MIN_ASPECT_RATIO_PORTRAIT_ONLY <package>

หมายเหตุ: คําสั่งจะใช้ชั่วคราวหรือนำการลบล้างออกเท่านั้น

OVERRIDE_MIN_ASPECT_RATIO_MEDIUM

ตั้งค่าสัดส่วนภาพขั้นต่ำของกิจกรรมเป็นค่าปานกลาง (3:2)

วิธีที่แอปจะได้รับผลลัพธ์เดียวกันกับการลบล้าง

โปรดดู OVERRIDE_MIN_ASPECT_RATIO

วิธีเพิ่มประสิทธิภาพแอป

โปรดดู OVERRIDE_MIN_ASPECT_RATIO

วิธีปิดใช้หรือเลือกไม่ใช้การลบล้าง

โปรดดู OVERRIDE_MIN_ASPECT_RATIO

แฟล็กพร็อพเพอร์ตี้ที่จะปรับการลบล้าง

โปรดดู OVERRIDE_MIN_ASPECT_RATIO

คำสั่ง adb ที่จะทดสอบการลบล้าง

วิธีใช้การลบล้าง

adb shell am compat enable OVERRIDE_MIN_ASPECT_RATIO_MEDIUM <package>

วิธีนําการลบล้างออก

adb shell am compat disable OVERRIDE_MIN_ASPECT_RATIO_MEDIUM <package>

หมายเหตุ: คําสั่งจะใช้ชั่วคราวหรือนำการลบล้างออกเท่านั้น

OVERRIDE_MIN_ASPECT_RATIO_LARGE

กำหนดสัดส่วนภาพขั้นต่ำของกิจกรรมให้มีค่าสูง (16:9)

วิธีที่แอปจะได้รับผลลัพธ์เดียวกันกับการลบล้าง

โปรดดู OVERRIDE_MIN_ASPECT_RATIO

วิธีเพิ่มประสิทธิภาพแอป

โปรดดู OVERRIDE_MIN_ASPECT_RATIO

วิธีปิดใช้หรือเลือกไม่ใช้การลบล้าง

โปรดดู OVERRIDE_MIN_ASPECT_RATIO

แฟล็กพร็อพเพอร์ตี้ที่จะปรับการลบล้าง

โปรดดู OVERRIDE_MIN_ASPECT_RATIO

คำสั่ง adb ที่จะทดสอบการลบล้าง

วิธีใช้การลบล้าง

adb shell am compat enable OVERRIDE_MIN_ASPECT_RATIO_LARGE <package>

วิธีนําการลบล้างออก

adb shell am compat disable OVERRIDE_MIN_ASPECT_RATIO_LARGE <package>`

หมายเหตุ: คําสั่งจะใช้ชั่วคราวหรือนำการลบล้างออกเท่านั้น

OVERRIDE_MIN_ASPECT_RATIO_TO_ALIGN_WITH_SPLIT_SCREEN

เปิดใช้งานการใช้สัดส่วนภาพแบบแบ่งหน้าจอ อนุญาตให้แอปใช้ มีพื้นที่ว่างในโหมดแยกหน้าจอ โดยหลีกเลี่ยงแถบดำด้านบน-ล่างของภาพ

วิธีที่แอปจะได้รับผลลัพธ์เดียวกันกับการลบล้าง

โปรดดู OVERRIDE_MIN_ASPECT_RATIO

วิธีเพิ่มประสิทธิภาพแอป

โปรดดู OVERRIDE_MIN_ASPECT_RATIO

วิธีปิดใช้หรือเลือกไม่ใช้การลบล้าง

โปรดดู OVERRIDE_MIN_ASPECT_RATIO

แฟล็กพร็อพเพอร์ตี้ที่จะปรับการลบล้าง

โปรดดู OVERRIDE_MIN_ASPECT_RATIO

คำสั่ง adb ที่จะทดสอบการลบล้าง

วิธีใช้การลบล้าง

adb shell am compat enable OVERRIDE_MIN_ASPECT_RATIO_TO_ALIGN_WITH_SPLIT_SCREEN <package>

วิธีนําการลบล้างออก

adb shell am compat disable OVERRIDE_MIN_ASPECT_RATIO_TO_ALIGN_WITH_SPLIT_SCREEN <package>

หมายเหตุ: คําสั่งจะใช้ชั่วคราวหรือนำการลบล้างออกเท่านั้น

OVERRIDE_MIN_ASPECT_RATIO_EXCLUDE_PORTRAIT_FULLSCREEN

ปิดใช้การลบล้างสัดส่วนภาพขั้นต่ำในโหมดเต็มหน้าจอแนวตั้งเพื่อใช้ทั้งหมด ที่ใช้ได้บนหน้าจอ

วิธีที่แอปจะได้รับผลลัพธ์เดียวกันกับการลบล้าง

โปรดดู OVERRIDE_MIN_ASPECT_RATIO

วิธีเพิ่มประสิทธิภาพแอป

โปรดดู OVERRIDE_MIN_ASPECT_RATIO

วิธีปิดใช้หรือเลือกไม่ใช้การลบล้าง

โปรดดู OVERRIDE_MIN_ASPECT_RATIO

แฟล็กพร็อพเพอร์ตี้ที่จะปรับการลบล้าง

โปรดดู OVERRIDE_MIN_ASPECT_RATIO

คำสั่ง adb ที่จะทดสอบการลบล้าง

วิธีใช้การลบล้าง

adb shell am compat enable OVERRIDE_MIN_ASPECT_RATIO_EXCLUDE_PORTRAIT_FULLSCREEN <package>

วิธีนําการลบล้างออก

adb shell am compat disable OVERRIDE_MIN_ASPECT_RATIO_EXCLUDE_PORTRAIT_FULLSCREEN <package>

หมายเหตุ: คําสั่งจะใช้ชั่วคราวหรือนำการลบล้างออกเท่านั้น

โอเวอร์ไรด์_ตำแหน่งใดๆ

เปิดใช้งานการลบล้างต่อไปนี้เพื่อลบล้างการวางแนว

วิธีที่แอปจะได้รับผลลัพธ์เดียวกันกับการลบล้าง

ตั้งค่าแอตทริบิวต์ไฟล์ Manifest ของ activity:screenOrientation หรือใช้ Activity#setRequestedOrientation() API

วิธีเพิ่มประสิทธิภาพแอป

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

วิธีปิดใช้หรือเลือกไม่ใช้การลบล้าง

ตั้งค่าสถานะที่พัก PROPERTY_COMPAT_ALLOW_ORIENTATION_OVERRIDE ไปยัง false

แฟล็กพร็อพเพอร์ตี้ที่จะปรับการลบล้าง

<property android:name="android.window.PROPERTY_COMPAT_ALLOW_ORIENTATION_OVERRIDE"
  android:value="true|false"/>

คำสั่ง adb ที่จะทดสอบการลบล้าง

วิธีใช้การลบล้าง

adb shell am compat enable OVERRIDE_ANY_ORIENTATION <package>

วิธีนําการลบล้างออก

adb shell am compat disable OVERRIDE_ANY_ORIENTATION <package>

หมายเหตุ: คําสั่งจะใช้ชั่วคราวหรือนำการลบล้างออกเท่านั้น

OVERRIDE_ORIENTATION_TO_USER

อนุญาตให้แอปแสดงเต็มพื้นที่แสดงผลที่มีอยู่ ลบล้างการวางแนวทั้งหมด ข้อจำกัดด้านความสามารถในการปรับขนาดและสัดส่วนภาพที่ระบุไว้ในไฟล์ Manifest ของแอป และ ไม่ประมวลผลการเรียกใดๆ ถึง Activity#setRequestedOrientation()

วิธีที่แอปจะได้รับผลลัพธ์เดียวกันกับการลบล้าง

  • อย่าตั้งค่าไฟล์ Manifest android:screenOrientation หรือตั้งค่าแอตทริบิวต์เป็น "user"

  • ตั้งค่าไฟล์ Manifest ของ android:resizeableActivity เป็น true

  • บนหน้าจอขนาดเล็ก เพื่อรองรับการปรับขนาดแอปขณะปิดใช้หลายหน้าต่าง ด้วย android:resizeableActivity=false ให้ตั้งค่า การแจ้งข้อมูลเมตา android.supports_size_changes เป็น true อย่าตั้งค่า minAspectRatio และ maxAspectRatio

วิธีเพิ่มประสิทธิภาพแอป

เปิดใช้แอปเพื่อรองรับการวางแนวทุกรูปแบบ อย่าตั้งค่าscreenOrientation ข้อกำหนดในไฟล์ Manifest ของแอป รองรับการปรับขนาดแอป โหมดหลายหน้าต่าง และอัตราส่วนการแสดงผลทั้งหมดได้โดยตั้งค่า android:resizeableActivity ในไฟล์ Manifest ของแอปเป็น true โปรดดู รองรับหน้าจอขนาดต่างๆ

วิธีปิดใช้หรือเลือกไม่ใช้การลบล้าง

โปรดดู OVERRIDE_ANY_ORIENTATION

แฟล็กพร็อพเพอร์ตี้ที่จะปรับการลบล้าง

โปรดดู OVERRIDE_ANY_ORIENTATION

คำสั่ง adb ที่จะทดสอบการลบล้าง

วิธีใช้การลบล้าง

adb shell am compat enable OVERRIDE_ANY_ORIENTATION_TO_USER <package>

วิธีนําการลบล้างออก

adb shell am compat disable OVERRIDE_ANY_ORIENTATION_TO_USER <package>

หมายเหตุ: คําสั่งจะใช้ชั่วคราวหรือนำการลบล้างออกเท่านั้น

OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT

เปิดใช้การวางแนวตั้งสำหรับทุกกิจกรรมในแพ็กเกจ ยกเว้น OVERRIDE_ANY_ORIENTATION เปิดอยู่ การลบล้าง จะใช้เฉพาะเมื่อกิจกรรมไม่ได้ระบุการวางแนวที่แน่นอนอื่นๆ ไว้

วิธีที่แอปจะได้รับผลลัพธ์เดียวกันกับการลบล้าง

โปรดดู OVERRIDE_ANY_ORIENTATION

วิธีเพิ่มประสิทธิภาพแอป

โปรดดู OVERRIDE_ANY_ORIENTATION

วิธีปิดใช้หรือเลือกไม่ใช้การลบล้าง

โปรดดู OVERRIDE_ANY_ORIENTATION

แฟล็กพร็อพเพอร์ตี้ที่จะปรับการลบล้าง

โปรดดู OVERRIDE_ANY_ORIENTATION

คำสั่ง adb ที่จะทดสอบการลบล้าง

วิธีใช้การลบล้าง

adb shell am compat enable OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT <package>

วิธีนําการลบล้างออก

adb shell am compat disable OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT <package>

หมายเหตุ: คําสั่งจะใช้ชั่วคราวหรือนำการลบล้างออกเท่านั้น

OVERRIDE_UNDEFINED_ORIENTATION_TO_NOSENSOR

เปิดใช้การวางแนวโนเซ็นเซอร์สําหรับกิจกรรมทั้งหมดใน ใหม่ เว้นแต่ OVERRIDE_ANY_ORIENTATION จะเป็น เปิดใช้แล้ว การลบล้างจะถูกใช้ต่อเมื่อไม่มีการวางแนวคงที่อื่นๆ ที่ระบุโดยกิจกรรม

วิธีที่แอปจะได้รับผลลัพธ์เดียวกันกับการลบล้าง

โปรดดู OVERRIDE_ANY_ORIENTATION

วิธีเพิ่มประสิทธิภาพแอป

โปรดดู OVERRIDE_ANY_ORIENTATION

วิธีปิดใช้หรือเลือกไม่ใช้การลบล้าง

โปรดดู OVERRIDE_ANY_ORIENTATION

แฟล็กพร็อพเพอร์ตี้ที่จะปรับการลบล้าง

โปรดดู OVERRIDE_ANY_ORIENTATION

คำสั่ง adb ที่จะทดสอบการลบล้าง

วิธีใช้การลบล้าง

adb shell am compat enable OVERRIDE_UNDEFINED_ORIENTATION_TO_NOSENSOR <package>

วิธีนําการลบล้างออก

adb shell am compat disable OVERRIDE_UNDEFINED_ORIENTATION_TO_NOSENSOR <package>

หมายเหตุ: คําสั่งจะใช้ชั่วคราวหรือนำการลบล้างออกเท่านั้น

OVERRIDE_LANDSCAPE_ORIENTATION_TO_REVERSE_LANDSCAPE

เปิดใช้การวางแนวกลับด้านสำหรับกิจกรรมทั้งหมดใน แพ็กเกจนั้น เว้นแต่ OVERRIDE_ANY_ORIENTATION จะเป็น เปิดใช้แล้ว การลบล้างจะถูกใช้ต่อเมื่อไม่มีการวางแนวคงที่อื่นๆ ที่ระบุโดยกิจกรรม

วิธีที่แอปจะได้รับผลลัพธ์เดียวกันกับการลบล้าง

โปรดดู OVERRIDE_ANY_ORIENTATION

วิธีเพิ่มประสิทธิภาพแอป

โปรดดู OVERRIDE_ANY_ORIENTATION

วิธีปิดใช้หรือเลือกไม่ใช้การลบล้าง

โปรดดู OVERRIDE_ANY_ORIENTATION

แฟล็กพร็อพเพอร์ตี้ที่จะปรับการลบล้าง

โปรดดู OVERRIDE_ANY_ORIENTATION

คำสั่ง adb ที่จะทดสอบการลบล้าง

วิธีใช้การลบล้าง

adb shell am compat enable OVERRIDE_LANDSCAPE_ORIENTATION_TO_REVERSE_LANDSCAPE <package>

วิธีนําการลบล้างออก

adb shell am compat disable OVERRIDE_LANDSCAPE_ORIENTATION_TO_REVERSE_LANDSCAPE <package>

หมายเหตุ: คําสั่งจะใช้ชั่วคราวหรือนำการลบล้างออกเท่านั้น

OVERRIDE_ORIENTATION_ONLY_FOR_CAMERA

จำกัดสูงสุด OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT OVERRIDE_UNDEFINED_ORIENTATION_TO_NOSENSOR และ OVERRIDE_LANDSCAPE_ORIENTATION_TO_REVERSE_LANDSCAPE มีผลเฉพาะเมื่อการเชื่อมต่อกล้องทำงานอยู่

วิธีที่แอปจะได้รับผลลัพธ์เดียวกันกับการลบล้าง

โปรดดู OVERRIDE_ANY_ORIENTATION

วิธีเพิ่มประสิทธิภาพแอป

โปรดดู OVERRIDE_ANY_ORIENTATION

วิธีปิดใช้หรือเลือกไม่ใช้การลบล้าง

โปรดดู OVERRIDE_ANY_ORIENTATION

แฟล็กพร็อพเพอร์ตี้ที่จะปรับการลบล้าง

โปรดดู OVERRIDE_ANY_ORIENTATION

คำสั่ง adb ที่จะทดสอบการลบล้าง

วิธีใช้การลบล้าง

adb shell am compat enable OVERRIDE_ORIENTATION_ONLY_FOR_CAMERA <package>

วิธีนําการลบล้างออก

adb shell am compat disable OVERRIDE_ORIENTATION_ONLY_FOR_CAMERA <package>

หมายเหตุ: คําสั่งจะใช้ชั่วคราวหรือนำการลบล้างออกเท่านั้น

OVERRIDE_USE_DISPLAY_LANDSCAPE_NATURAL_ORIENTATION

จำกัดการวางแนวจอแสดงผลให้อยู่ในแนวเดียวกับแนวนอนเมื่อ ตรงตามเงื่อนไขต่อไปนี้

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

วิธีที่แอปจะได้รับผลลัพธ์เดียวกันกับการลบล้าง

ไม่สามารถใช้งาน ควรแก้ไขปัญหาในตรรกะแอปพลิเคชัน

วิธีเพิ่มประสิทธิภาพแอป

โปรดดู OVERRIDE_ANY_ORIENTATION

วิธีปิดใช้หรือเลือกไม่ใช้การลบล้าง

ตั้งค่าสถานะที่พัก PROPERTY_COMPAT_ALLOW_DISPLAY_ORIENTATION_OVERRIDE ไปยัง false

แฟล็กพร็อพเพอร์ตี้ที่จะปรับการลบล้าง

<property android:name="android.window.PROPERTY_COMPAT_ALLOW_DISPLAY_ORIENTATION_OVERRIDE"
  android:value="true|false"/>

คำสั่ง adb ที่จะทดสอบการลบล้าง

วิธีใช้การลบล้าง

adb shell am compat enable OVERRIDE_USE_DISPLAY_LANDSCAPE_NATURAL_ORIENTATION <package>

วิธีนําการลบล้างออก

adb shell am compat disable OVERRIDE_USE_DISPLAY_LANDSCAPE_NATURAL_ORIENTATION <package>

หมายเหตุ: คําสั่งจะใช้ชั่วคราวหรือนำการลบล้างออกเท่านั้น

OVERRIDE_ENABLE_COMPAT_IGNORE_REQUESTED_ORIENTATION

เปิดใช้นโยบายความเข้ากันได้ที่ข้ามการอัปเดตการวางแนวของแอปเพื่อตอบสนองต่อแอป การโทรหา Activity#setRequestedOrientation() เมื่อแอป เป็นการเปิดอีกครั้งหรือมีการใช้งานร่วมกับกล้องที่ใช้งานอยู่

วิธีที่แอปจะได้รับผลลัพธ์เดียวกันกับการลบล้าง

ตั้งค่าสถานะพร็อพเพอร์ตี้ PROPERTY_COMPAT_IGNORE_REQUESTED_ORIENTATION ไปยัง true

วิธีเพิ่มประสิทธิภาพแอป

โปรดดู OVERRIDE_ANY_ORIENTATION

วิธีปิดใช้หรือเลือกไม่ใช้การลบล้าง

ตั้งค่าสถานะพร็อพเพอร์ตี้ PROPERTY_COMPAT_IGNORE_REQUESTED_ORIENTATION ไปยัง false

แฟล็กพร็อพเพอร์ตี้ที่จะปรับการลบล้าง

<property android:name="android.window.PROPERTY_COMPAT_IGNORE_REQUESTED_ORIENTATION"
  android:value="true|false"/>

คำสั่ง adb ที่จะทดสอบการลบล้าง

วิธีใช้การลบล้าง

adb shell am compat enable OVERRIDE_ENABLE_COMPAT_IGNORE_REQUESTED_ORIENTATION <package>

วิธีนําการลบล้างออก

adb shell am compat disable OVERRIDE_ENABLE_COMPAT_IGNORE_REQUESTED_ORIENTATION <package>

หมายเหตุ: คําสั่งจะใช้ชั่วคราวหรือนำการลบล้างออกเท่านั้น

OVERRIDE_ENABLE_COMPAT_IGNORE_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED

เปิดใช้นโยบายความเข้ากันได้ที่ไม่สนใจการวางแนวที่ขอของแอปใน การตอบสนองต่อการเรียกแอป Activity#setRequestedOrientation() มากกว่า 2 ครั้ง ใน 1 วินาทีหากกิจกรรมไม่ได้มีแถบดำด้านบน-ล่างของภาพสำหรับการวางแนวคงที่

วิธีที่แอปจะได้รับผลลัพธ์เดียวกันกับการลบล้าง

ไม่สามารถใช้งาน ควรแก้ไขปัญหาในตรรกะแอปพลิเคชัน

วิธีเพิ่มประสิทธิภาพแอป

โปรดดู OVERRIDE_ANY_ORIENTATION

วิธีปิดใช้หรือเลือกไม่ใช้การลบล้าง

ตั้งค่าสถานะพร็อพเพอร์ตี้ PROPERTY_COMPAT_ALLOW_IGNORING_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED ถึง false

แฟล็กพร็อพเพอร์ตี้ที่จะปรับการลบล้าง

<property android:name="android.window.PROPERTY_COMPAT_ALLOW_IGNORING_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED"
  android:value="false"/>

คำสั่ง adb ที่จะทดสอบการลบล้าง

วิธีใช้การลบล้าง

adb shell am compat enable OVERRIDE_ENABLE_COMPAT_IGNORE_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED <package>

วิธีนําการลบล้างออก

adb shell am compat disable OVERRIDE_ENABLE_COMPAT_IGNORE_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED <package>

หมายเหตุ: คําสั่งจะใช้ชั่วคราวหรือนำการลบล้างออกเท่านั้น

OVERRIDE_RESPECT_REQUESTED_ORIENTATION

ไม่รวมแพ็กเกจจากการละเว้นลักษณะคำขอการวางแนวที่สามารถเปิดใช้ได้ สำหรับพื้นที่แสดงผลหรือพื้นที่แสดงผลทั้งหมด

วิธีที่แอปจะได้รับผลลัพธ์เดียวกันกับการลบล้าง

ไม่สามารถใช้งาน ควรแก้ไขปัญหาในตรรกะแอปพลิเคชัน

วิธีเพิ่มประสิทธิภาพแอป

โปรดดู OVERRIDE_ANY_ORIENTATION

วิธีปิดใช้หรือเลือกไม่ใช้การลบล้าง

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

แฟล็กพร็อพเพอร์ตี้ที่จะปรับการลบล้าง

ไม่มีแฟล็กพร็อพเพอร์ตี้สำหรับการลบล้างนี้

คำสั่ง adb ที่จะทดสอบการลบล้าง

วิธีใช้การลบล้าง

adb shell am compat enable OVERRIDE_RESPECT_REQUESTED_ORIENTATION <package>

วิธีนําการลบล้างออก

adb shell am compat disable OVERRIDE_RESPECT_REQUESTED_ORIENTATION <package>

หมายเหตุ: คําสั่งจะใช้ชั่วคราวหรือนำการลบล้างออกเท่านั้น

NEVER_SANDBOX_DISPLAY_APIS

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

วิธีที่แอปจะได้รับผลลัพธ์เดียวกันกับการลบล้าง

ประกาศกิจกรรมที่ปรับขนาดได้โดยการตั้งค่าแอตทริบิวต์ แอตทริบิวต์ไฟล์ Manifest ของ android:resizeableActivity เป็น true หรือแจ้งข้อมูลเมตา android.supports_size_changes เป็น true

วิธีเพิ่มประสิทธิภาพแอป

แอปที่ประกาศว่าปรับขนาดได้โดยสมบูรณ์ไม่ควรใช้ขนาดการแสดงผล เพื่อจัดตำแหน่งองค์ประกอบ UI ย้ายข้อมูลแอปไปยัง API ล่าสุดที่ ระบุ WindowMetrics หากคุณใช้ Jetpack Compose ให้ใช้ประโยชน์จาก WindowSizeClass API สำหรับวาด UI ตามปริมาณหน้าจอ ที่แอปมีบนจอแสดงผลปัจจุบัน โปรดดู คลาสขนาดหน้าต่าง

วิธีปิดใช้หรือเลือกไม่ใช้การลบล้าง

เลือกไม่ใช้ไม่ได้ ย้ายข้อมูลจาก API ที่เลิกใช้งานแล้ว

แฟล็กพร็อพเพอร์ตี้ที่จะปรับการลบล้าง

ไม่มีแฟล็กพร็อพเพอร์ตี้สำหรับการลบล้างนี้

คำสั่ง adb ที่จะทดสอบการลบล้าง

วิธีใช้การลบล้าง

adb shell am compat enable NEVER_SANDBOX_DISPLAY_APIS <package>

วิธีนําการลบล้างออก

adb shell am compat disable NEVER_SANDBOX_DISPLAY_APIS <package>

หมายเหตุ: คําสั่งจะใช้ชั่วคราวหรือนำการลบล้างออกเท่านั้น

ALWAYS_SANDBOX_DISPLAY_APIS

บังคับให้แพ็กเกจใช้แซนด์บ็อกซ์ API ของ Display เสมอ โดยไม่คำนึงถึงโหมดกรอบเวลา Display API จะมีขอบเขตของแอปเสมอ

วิธีที่แอปจะได้รับผลลัพธ์เดียวกันกับการลบล้าง

ประกาศกิจกรรมที่ปรับขนาดไม่ได้ด้วยการตั้งค่าพารามิเตอร์ android:resizeableActivity เป็นแอตทริบิวต์ false หรือ แจ้งข้อมูลเมตา android.supports_size_changes ไปยัง false แล้ว

วิธีเพิ่มประสิทธิภาพแอป

แอปที่ประกาศว่าปรับขนาดได้โดยสมบูรณ์ไม่ควรอาศัยขนาดการแสดงผลในการ ตำแหน่ง UI ย้ายข้อมูลแอปจาก API ที่เลิกใช้งานแล้วไปยัง API ล่าสุดที่มี WindowMetrics โปรดดู WindowMetricsCalculator

วิธีปิดใช้หรือเลือกไม่ใช้การลบล้าง

เลือกไม่ใช้ไม่ได้ ย้ายข้อมูลจาก API ที่เลิกใช้งานแล้ว

แฟล็กพร็อพเพอร์ตี้ที่จะปรับการลบล้าง

ไม่มีแฟล็กพร็อพเพอร์ตี้สำหรับการลบล้างนี้

คำสั่ง adb ที่จะทดสอบการลบล้าง

วิธีใช้การลบล้าง

adb shell am compat enable ALWAYS_SANDBOX_DISPLAY_APIS <package>

วิธีนําการลบล้างออก

adb shell am compat disable ALWAYS_SANDBOX_DISPLAY_APIS <package>

หมายเหตุ: คําสั่งจะใช้ชั่วคราวหรือนำการลบล้างออกเท่านั้น

OVERRIDE_SANDBOX_VIEW_BOUNDS_APIS

บังคับให้แพ็กเกจใช้แซนด์บ็อกซ์ของ API ของ View ต่อไปนี้กับขอบเขตกิจกรรม

วิธีที่แอปจะได้รับผลลัพธ์เดียวกันกับการลบล้าง

แก้ไขปัญหาในโค้ดของแอปพลิเคชันโดยใช้ API ที่ระบุขอบเขตของ หน้าต่างแอปและออฟเซ็ตที่สัมพันธ์กับหน้าต่างแอปมากกว่าขอบเขตของ การแสดงผลของอุปกรณ์และออฟเซ็ตที่สัมพันธ์กับการแสดงผลของอุปกรณ์

วิธีเพิ่มประสิทธิภาพแอป

แอปควรใช้ View API โดยคำนึงถึงความเป็นไปได้ในการใช้แถบดำด้านบน-ล่างของภาพ และโหมดหลายหน้าต่างที่ใช้กับแอป โปรดดู WindowMetricsCalculator

วิธีปิดใช้หรือเลือกไม่ใช้การลบล้าง

ตั้งค่าสถานะพร็อพเพอร์ตี้ PROPERTY_COMPAT_ALLOW_SANDBOXING_VIEW_BOUNDS_APIS ไปยัง false

แฟล็กพร็อพเพอร์ตี้ที่จะปรับการลบล้าง

<property android:name="android.window.PROPERTY_COMPAT_ALLOW_SANDBOXING_VIEW_BOUNDS_APIS"
  android:value="false"/>

คำสั่ง adb ที่จะทดสอบการลบล้าง

วิธีใช้การลบล้าง

adb shell am compat enable OVERRIDE_SANDBOX_VIEW_BOUNDS_APIS <package>

วิธีนําการลบล้างออก

adb shell am compat disable OVERRIDE_SANDBOX_VIEW_BOUNDS_APIS <package>

หมายเหตุ: คําสั่งจะใช้ชั่วคราวหรือนำการลบล้างออกเท่านั้น

OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION

ปิดใช้การบังคับหมุน ปรับปรุงประสบการณ์ของผู้ใช้ในบางแอป

วิธีที่แอปจะได้รับผลลัพธ์เดียวกันกับการลบล้าง

ตั้งค่าสถานะพร็อพเพอร์ตี้ PROPERTY_CAMERA_COMPAT_ALLOW_FORCE_ROTATION ไปยัง false

วิธีเพิ่มประสิทธิภาพแอป

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

วิธีปิดใช้หรือเลือกไม่ใช้การลบล้าง

ตั้งค่าสถานะพร็อพเพอร์ตี้ PROPERTY_CAMERA_COMPAT_ALLOW_FORCE_ROTATION ไปยัง true

แฟล็กพร็อพเพอร์ตี้ที่จะปรับการลบล้าง

<property android:name="android.window.PROPERTY_CAMERA_COMPAT_ALLOW_FORCE_ROTATION"
  android:value="true|false"/>

คำสั่ง adb ที่จะทดสอบการลบล้าง

หากต้องการใช้การลบล้างซึ่งนำการบังคับการหมุนออก ให้ทำดังนี้

adb shell am compat enable OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION <package>

หากต้องการนำการลบล้างออกซึ่งจะทำให้มีการบังคับให้หมุนได้ ให้ทำดังนี้

adb shell am compat disable OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION <package>

หมายเหตุ: คําสั่งจะใช้ชั่วคราวหรือนำการลบล้างออกเท่านั้น

OVERRIDE_CAMERA_COMPAT_DISABLE_REFRESH

ปิดใช้การรีเฟรชกิจกรรมหลังจากบังคับการหมุน ปรับปรุงประสบการณ์ของผู้ใช้ เมื่อการรีเฟรชทำให้แอปสูญเสียสถานะ

วิธีที่แอปจะได้รับผลลัพธ์เดียวกันกับการลบล้าง

ตั้งค่าสถานะพร็อพเพอร์ตี้ PROPERTY_CAMERA_COMPAT_ALLOW_REFRESH ไปยัง false

วิธีเพิ่มประสิทธิภาพแอป

โปรดดู OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION

วิธีปิดใช้หรือเลือกไม่ใช้การลบล้าง

ตั้งค่าสถานะพร็อพเพอร์ตี้ PROPERTY_CAMERA_COMPAT_ALLOW_REFRESH ไปยัง true

แฟล็กพร็อพเพอร์ตี้ที่จะปรับการลบล้าง

<property android:name="android.window.PROPERTY_CAMERA_COMPAT_ALLOW_REFRESH"
  android:value="true|false"/>

คำสั่ง adb ที่จะทดสอบการลบล้าง

หากต้องการใช้การลบล้าง ซึ่งจะนำการรีเฟรชกิจกรรมออก ให้ทำดังนี้

adb shell am compat enable OVERRIDE_CAMERA_COMPAT_DISABLE_REFRESH <package>

วิธีนำการลบล้างซึ่งอนุญาตให้รีเฟรชกิจกรรมออก

adb shell am compat disable OVERRIDE_CAMERA_COMPAT_DISABLE_REFRESH <package>

หมายเหตุ: คําสั่งจะใช้ชั่วคราวหรือนำการลบล้างออกเท่านั้น

OVERRIDE_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE

ทำให้แพ็กเกจดังกล่าวใช้เพื่อรีเฟรชกิจกรรมโดยใช้ onResume()onPause()onResume() รอบแทนที่จะเป็น onResume()onStop()onResume() หลังจากบังคับให้หมุนกล้องแล้ว

วิธีที่แอปจะได้รับผลลัพธ์เดียวกันกับการลบล้าง

ตั้งค่าสถานะพร็อพเพอร์ตี้ PROPERTY_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE ไปยัง true

วิธีเพิ่มประสิทธิภาพแอป

โปรดดู OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION

วิธีปิดใช้หรือเลือกไม่ใช้การลบล้าง

ตั้งค่าสถานะพร็อพเพอร์ตี้ PROPERTY_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE ไปยัง false

แฟล็กพร็อพเพอร์ตี้ที่จะปรับการลบล้าง

<property android:name="android.window.PROPERTY_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE"
  android:value="true|false"/>

คำสั่ง adb ที่จะทดสอบการลบล้าง

วิธีใช้การลบล้าง

adb shell am compat enable OVERRIDE_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE <package>

วิธีนําการลบล้างออก

adb shell am compat disable OVERRIDE_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE <package>

หมายเหตุ: คําสั่งจะใช้ชั่วคราวหรือนำการลบล้างออกเท่านั้น

OVERRIDE_CAMERA_LANDSCAPE_TO_PORTRAIT

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

วิธีที่แอปจะได้รับผลลัพธ์เดียวกันกับการลบล้าง

ตั้งค่าสถานะพร็อพเพอร์ตี้ PROPERTY_COMPAT_OVERRIDE_LANDSCAPE_TO_PORTRAIT ไปยัง true

วิธีเพิ่มประสิทธิภาพแอป

โปรดดู OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION

วิธีปิดใช้หรือเลือกไม่ใช้การลบล้าง

ตั้งค่าสถานะพร็อพเพอร์ตี้ PROPERTY_COMPAT_OVERRIDE_LANDSCAPE_TO_PORTRAIT ไปยัง false

แฟล็กพร็อพเพอร์ตี้ที่จะปรับการลบล้าง

<property android:name="android.camera.PROPERTY_COMPAT_OVERRIDE_LANDSCAPE_TO_PORTRAIT"
  android:value="true|false"/>

คำสั่ง adb ที่จะทดสอบการลบล้าง

วิธีใช้การลบล้างซึ่งใช้การครอบตัดกล้องหน้าด้านใน

adb shell am compat enable OVERRIDE_CAMERA_LANDSCAPE_TO_PORTRAIT <package>

หากต้องการนำการลบล้างออก ซึ่งจะนำการครอบตัดกล้องหน้าด้านในออก ให้ทำดังนี้

adb shell am compat disable OVERRIDE_CAMERA_LANDSCAPE_TO_PORTRAIT <package>

หมายเหตุ: คําสั่งจะใช้ชั่วคราวหรือนำการลบล้างออกเท่านั้น

OVERRIDE_DISABLE_MEDIA_PROJECTION_SINGLE_APP_OPTION

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

วิธีที่แอปจะได้รับผลลัพธ์เดียวกันกับการลบล้าง

อนุญาตลักษณะการฉายภาพสื่อเริ่มต้น (ที่ใช้ใน Android 14, API ระดับ 34 กับ createScreenCaptureIntent()) ซึ่งช่วยให้ผู้ใช้เลือกได้ว่าจะแชร์หน้าจอแบบเต็มหน้าจอหรือแอปเดียว โดยไม่คํานึงถึงโหมดการจัดกรอบเวลา หรือโทร createScreenCaptureIntent(MediaProjectionConfig) ที่มีอาร์กิวเมนต์ MediaProjectionConfig ที่แสดงผลจาก โทรหา createConfigForUserChoice()

วิธีเพิ่มประสิทธิภาพแอป

อนุญาตให้ผู้ใช้เลือกว่าจะแชร์จอแสดงผลของอุปกรณ์ทั้งเครื่องหรือแอปเดียว ในระหว่างการฉายสื่อ ซึ่งใน Android 14 จะเป็นลักษณะการทำงานเริ่มต้น

ทำให้แอปปรับขนาด (resizeableActivity="true") เป็น รองรับโหมดหลายหน้าต่าง

วิธีปิดใช้หรือเลือกไม่ใช้การลบล้าง

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

แฟล็กพร็อพเพอร์ตี้ที่จะปรับการลบล้าง

ไม่มี

คำสั่ง adb ที่จะทดสอบการลบล้าง

หากต้องการใช้การลบล้าง ซึ่งจะยกเลิกการเลือกไม่ใช้การแชร์หน้าจอบางส่วนของแอป (ซึ่งก็คือเปิดใช้การแชร์หน้าจอบางส่วน) ดังนี้

adb shell am compat enable OVERRIDE_DISABLE_MEDIA_PROJECTION_SINGLE_APP_OPTION <package>

หากต้องการนำการลบล้างออก ซึ่งจะทำให้แอปเลือกไม่ใช้หน้าจอบางส่วนได้ การแชร์:

adb shell am compat disable OVERRIDE_DISABLE_MEDIA_PROJECTION_SINGLE_APP_OPTION <package>

หมายเหตุ: คําสั่งจะใช้ชั่วคราวหรือนำการลบล้างออกเท่านั้น

OVERRIDE_ENABLE_COMPAT_FAKE_FOCUS

เปิดใช้การส่งโฟกัสปลอมสำหรับแอปที่ไม่โฟกัสในโหมดแยกหน้าจอ ใช้บ้าง เครื่องเกมจะรอให้มีสมาธิก่อนวาดเนื้อหาของแอป ดังนั้น โฟกัสปลอมช่วยให้แอปหลีกเลี่ยงการปิดทับเมื่อกลับมาทำงานอีกครั้งและไม่ ก็ยังต้องมีสมาธิ

วิธีที่แอปจะได้รับผลลัพธ์เดียวกันกับการลบล้าง

ตั้งค่าสถานะพร็อพเพอร์ตี้ PROPERTY_COMPAT_ENABLE_FAKE_FOCUS ถึง true

วิธีเพิ่มประสิทธิภาพแอป

คุณหลีกเลี่ยงปัญหานี้ได้หากแอปรองรับการวางแนวหลายแบบและ ของการกำหนดค่านั้นเปลี่ยนแปลงได้ดี ทําให้แอปมีหน้าจอขนาดใหญ่ด้วยการทําตาม หลักเกณฑ์ด้านคุณภาพสำหรับแอปที่มีหน้าจอขนาดใหญ่

หากคุณเรียกใช้เครื่องมือเกม Unity ให้อัปเกรดเป็นเวอร์ชัน 2019.4.40 ขึ้นไปและ ส่งออกเกมอีกครั้ง เก็บตัวเลือก Resizable Window ไว้ เช็คอินใน Android Player การตั้งค่า

วิธีปิดใช้หรือเลือกไม่ใช้การลบล้าง

ตั้งค่าสถานะพร็อพเพอร์ตี้ PROPERTY_COMPAT_ENABLE_FAKE_FOCUS ถึง false

แฟล็กพร็อพเพอร์ตี้ที่จะปรับการลบล้าง

<property android:name="android.window.PROPERTY_COMPAT_ENABLE_FAKE_FOCUS"
  android:value="true|false"/>

คำสั่ง adb ที่จะทดสอบการลบล้าง

วิธีใช้การลบล้าง

adb shell am compat enable OVERRIDE_ENABLE_COMPAT_FAKE_FOCUS <package>

วิธีนําการลบล้างออก

adb shell am compat disable OVERRIDE_ENABLE_COMPAT_FAKE_FOCUS <package>

หมายเหตุ: คําสั่งจะใช้ชั่วคราวหรือนำการลบล้างออกเท่านั้น

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