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

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 ที่เลิกใช้งานจะยังคงใช้งานได้เพื่อการทำงานร่วมกันแบบย้อนหลัง

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

ปัญหา

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

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

ดูข้อมูลเพิ่มเติมได้ที่รองรับโหมดหลายหน้าต่าง

การใช้ View API ในทางที่ผิด:

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

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

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

การลบล้าง 2 รายการจะปรับ Display API ที่เลิกใช้งานและ View API ที่ใช้ในทางที่ผิดเพื่อแสดงขอบเขตของแอป ดังนี้ 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 สามารถรวมสไตล์ที่ทำให้กิจกรรมมีความโปร่งใส

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

ปัญหา

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

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

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

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

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

มุมมน

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

กล่องโต้ตอบสิทธิ์จะไม่แสดงเต็มพื้นที่ที่แสดงได้ เนื่องจากโดยปกติแล้วเลย์เอาต์กล่องโต้ตอบจะใช้ 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 ของแอปเพื่อเลือกไม่ใช้การลบล้างบางรายการ

การลบล้างสำหรับแต่ละแอป
ประเภท ชื่อ รหัส คำอธิบาย
ปรับขนาดได้ FORCE_RESIZE_APP 174042936 ข้ามโหมดความเข้ากันได้ของขนาดสำหรับแอปเมื่อมีการเปลี่ยนแปลงการกำหนดค่า
FORCE_NON_RESIZE_APP 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 ปิดใช้การลบล้างอัตราส่วนภาพขั้นต่ำเพื่อให้แอปแสดงแบบเต็มหน้าจอเมื่ออุปกรณ์อยู่ในแนวตั้ง
การวางแนว OVERRIDE_ANY_ORIENTATION 265464455 เปิดใช้การลบล้างการวางแนว
OVERRIDE_ANY_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 ป้องกันไม่ให้ภาพแสดงผลแบบ Letterboxing โดยปิดใช้การตั้งค่า "ละเว้นคำขอการวางแนว" ของผู้ผลิตอุปกรณ์
Sandbox API NEVER_SANDBOX_DISPLAY_APIS 184838306 ป้องกันไม่ให้มีการเปลี่ยนแปลงลักษณะการทํางานของ Display 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 ส่งเหตุการณ์โฟกัสปลอมไปยังแอปได้ ซึ่งจะเป็นสัญญาณให้แอปเริ่มวาดเนื้อหาอีกครั้ง

FORCE_RESIZE_APP

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

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

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

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

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

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

ตั้งค่า Flag ของพร็อพเพอร์ตี้ 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>

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

FORCE_NON_RESIZE_APP

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

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

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

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

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

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

ตั้งค่า Flag ของพร็อพเพอร์ตี้ 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

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

ระบุข้อจำกัดสัดส่วนภาพหรือตั้งค่า Flag ของพร็อพเพอร์ตี้ 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_ONLY

จำกัดการตั้งค่าแอปที่บังคับใช้อัตราส่วนภาพขั้นต่ำที่กำหนดสำหรับกิจกรรมที่มีการวางแนวเป็นแนวตั้งเท่านั้น เปิดใช้งานโดยค่าเริ่มต้นและจะมีผลก็ต่อเมื่อเปิดใช้ 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>

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

OVERRIDE_ANY_ORIENTATION

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

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

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

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

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

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

ตั้งค่า Flag ของพร็อพเพอร์ตี้ 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_ANY_ORIENTATION_TO_USER

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

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

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

  • ตั้งค่าแอตทริบิวต์ไฟล์ Manifest android:resizeableActivity เป็น true

  • ในหน้าจอขนาดเล็ก หากต้องการรองรับการปรับขนาดแอปขณะปิดใช้โหมดหลายหน้าต่างด้วย android:resizeableActivity=false ให้ตั้งค่า Flag ข้อมูลเมตา 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

เปิดใช้การวางแนว 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

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

ตั้งค่า Flag ของพร็อพเพอร์ตี้ 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 เพื่อปิดใช้การลบล้าง

การตั้งค่าพร็อพเพอร์ตี้เพื่อปรับการลบล้าง

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

คำสั่ง 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

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

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

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

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

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

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

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

การตั้งค่าพร็อพเพอร์ตี้เพื่อปรับการลบล้าง

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

คำสั่ง 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

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

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

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

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

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

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

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

การตั้งค่าพร็อพเพอร์ตี้เพื่อปรับการลบล้าง

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

คำสั่ง 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

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

ตั้งค่าสถานะพร็อพเพอร์ตี้ 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>

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

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