Android เปิดใช้งานโหมดความเข้ากันได้สำหรับแอปที่ประกาศการวางแนวหรือ ข้อจำกัดด้านความสามารถในการปรับขนาด โหมดความเข้ากันได้ดูแลให้แอปทำงานได้อย่างถูกต้อง อุปกรณ์ที่มีหน้าจอขนาดใหญ่และโทรศัพท์ฝาพับแบบพับได้ แต่ใช้งานได้ต่ำกว่าประสิทธิภาพ
การลบล้างต่อแอปช่วยให้ผู้ผลิตอุปกรณ์เปลี่ยนได้ ลักษณะการทำงานของแอปเพื่อปรับปรุงประสบการณ์ของผู้ใช้หรือป้องกันไม่ให้แอปขัดข้อง อุปกรณ์ที่เฉพาะเจาะจง
อุปกรณ์อ้างอิง
อุปกรณ์ต่อไปนี้อาจต้องลบล้างต่อแอปเนื่องจากผิดปกติ หรือการกำหนดค่าที่แอปไม่รองรับ เช่น
- แท็บเล็ต: การวางแนวตามธรรมชาติของแท็บเล็ตบางรุ่น เช่น Pixel Tablet
คือแนวนอน อุปกรณ์อยู่ในแนวตามธรรมชาติเมื่อ
Display#getRotation()
การคืนสินค้าSurface.ROTATION_0
หากแอปคิดว่าROTATION_0
เป็นแนวตั้ง เลย์เอาต์ของแอปและการแสดงตัวอย่างจากกล้องอาจไม่ตรงกับจอแสดงผลของอุปกรณ์ - อุปกรณ์แบบพับได้แนวนอน: อุปกรณ์แบบพับได้บางรุ่น เช่น Pixel Fold อยู่ใน การวางแนวตั้งขึ้นเมื่อพับ แต่เป็นแนวนอนเมื่อกางออก หากแอปคิดว่าการวางแนวเมื่อกางออกเป็นแนวตั้ง ภาพกะพริบ มีแนวโน้มที่จะเกิดปัญหาวนซ้ำหรือเลย์เอาต์
- โทรศัพท์ฝาพับแบบพับได้: โทรศัพท์ฝาพับที่กางออกมักอยู่ในแนวตั้ง การวางแนว แต่เมื่อพับ โทรศัพท์มักจะมีจอแสดงผลขนาดเล็กอยู่ใน แนวนอน แอปต้องระบุและรองรับ การวางแนวของจอแสดงผล
ปัญหาความเข้ากันได้ที่พบได้ทั่วไป
แอปพบปัญหาความเข้ากันได้บ่อยที่สุดเนื่องจากการวางแนวของแอป ข้อจำกัด ข้อจำกัดด้านขนาดและอัตราส่วน การจัดการที่ไม่ถูกต้อง การวางแนวการแสดงตัวอย่างของกล้อง และ API ที่ใช้ในทางที่ผิด
เล็ทเทอร์บ็อกซิง
แถบดำด้านบน-ล่างของภาพวางตำแหน่งแอป ตรงกลางหน้าจอหรือบนหน้าจอขนาดใหญ่ ไปด้านใดด้านหนึ่งเพื่อให้เข้าถึงได้ง่าย ด้าน (แถบสีทึบ หรือวอลเปเปอร์เบลอ) เติมเต็มพื้นที่แสดงผลที่ไม่ได้ใช้ตามด้านข้างหรือด้านบน และ ที่ด้านล่างของแอป
แถบดำด้านบน-ล่างของภาพเกิดขึ้นบนอุปกรณ์ที่มีหน้าจอขนาดใหญ่ เนื่องจากขนาดและ สัดส่วนภาพบนหน้าจอของอุปกรณ์มักจะแตกต่างจากอัตราส่วนมาตรฐาน ซึ่งแอปส่วนใหญ่ได้รับการออกแบบมาเป็นพิเศษ
![](https://developer.android.com/static/images/guide/practices/compatibility-mode/letterboxing.png?authuser=5&hl=th)
รูปที่ 1 แอปที่ถูกจำกัดให้วางอยู่ในแนวตั้งมีแถบดำด้านบน-ล่างของภาพในแท็บเล็ตแนวนอนและพับได้
ปัญหา
แอปไม่ได้รองรับการกำหนดค่าการแสดงผลทั้งหมดเนื่องจากแอปได้รับการแก้ไขแล้ว การวางแนว สัดส่วนภาพคงที่ หรือไม่ปรับขนาดไม่ได้
การตั้งค่าการกำหนดค่าที่ควบคุมการวางแนวและความสามารถในการปรับขนาดของแอปประกอบด้วย ดังต่อไปนี้:
screenOrientation
: ระบุการวางแนวคงที่สำหรับ แอป แอปยังตั้งการวางแนวขณะรันไทม์ได้โดยใช้Activity#setRequestedOrientation()
resizeableActivity
: ระบุว่าระบบสามารถ ปรับขนาดแอปให้พอดีกับหน้าต่างขนาดต่างๆ ใน Android 11 (ระดับ API 30) และต่ำกว่า ระบุว่าแอปรองรับโหมดหลายหน้าต่างหรือไม่ เปิด Android 12 (API ระดับ 31) ขึ้นไป ระบุว่าแอปรองรับหรือไม่ โหมดหลายหน้าต่างบนหน้าจอขนาดเล็ก (กะทัดรัด ขนาดหน้าต่าง) ใน Android 12 ขึ้นไป แอปต่างๆ รองรับโหมดหลายหน้าต่างในหน้าจอขนาดใหญ่ (หน้าต่างขนาดกลางหรือขยาย ขนาด) โดยไม่คำนึงถึงการตั้งค่านี้maxAspectRatio
: ระบุสัดส่วนภาพสูงสุด ที่แอปนี้รองรับ เฉพาะแอปที่ตั้งค่าresizeableActivity
เป็นfalse
ได้ ตั้งค่าmaxAspectRatio
minAspectRatio
: ระบุสัดส่วนภาพขั้นต่ำ ที่แอปนี้รองรับ เฉพาะแอปที่ตั้งค่าresizeableActivity
เป็นfalse
ได้ ตั้งค่าminAspectRatio
![](https://developer.android.com/static/images/guide/practices/compatibility-mode/letterboxing_issue.png?authuser=5&hl=th)
แอปถูกจำกัดให้แสดงผลในแนวตั้งในอุปกรณ์แนวนอนไม่ได้
การเพิ่มประสิทธิภาพ
แอปควรรองรับอุปกรณ์และการแสดงผลในโหมดหลายหน้าต่างทั้งหมด การวางแนวและขนาดต่างๆ นำการวางแนวออกทั้งหมดและสัดส่วนภาพคงที่ จากเลย์เอาต์ของแอปและไฟล์ Manifest ของแอป
![](https://developer.android.com/static/images/guide/practices/compatibility-mode/letterboxing_optimization.png?authuser=5&hl=th)
แอปรองรับการวางแนวอุปกรณ์ทุกแบบ
วิธีแก้ปัญหาความเข้ากันได้
หากแอปที่มีการวางแนวคงที่หรือสัดส่วนภาพคงที่ทำงานในหน้าต่างที่ แอปไม่สนับสนุนขนาดหรือการวางแนวหน้าต่างโดยตรง Android แถบดำด้านบน-ล่างของภาพในแอปเพื่อรักษาความต่อเนื่อง
เริ่มต้นด้วย Android 12 (API ระดับ 31) และทำต่อด้วย 12L (API ระดับ 32) แพลตฟอร์มดังกล่าวใช้การปรับปรุงหลายอย่างกับแอปที่มีแถบดำด้านบน-ล่างของภาพ อุปกรณ์ จะใช้การปรับปรุง UI คุณไม่จำเป็นต้องดำเนินการใดๆ เพิ่มเติม เพื่อให้แอปของคุณได้รับประโยชน์จากการปรับปรุง
Android 12 (API ระดับ 31) ขอแนะนำการเพิ่มประสิทธิภาพเพื่อความสวยงามต่อไปนี้ซึ่ง ที่ผู้ผลิตอุปกรณ์จะเป็นผู้กำหนดค่าได้ ดังนี้
- มุมโค้งมน: มุมของหน้าต่างแอปดูกลมกลืนมากขึ้น
- ความโปร่งใสของแถบระบบ: แถบสถานะและแถบนำทาง ซึ่งวางซ้อน เป็นแบบกึ่งโปร่งใส ทำให้ไอคอนบนแถบมองเห็นได้ตลอดเวลา พื้นหลังแถบดำด้านบน-ล่างของภาพ
- สัดส่วนภาพที่กำหนดค่าได้: สัดส่วนภาพของแอปสามารถปรับได้ เพื่อปรับปรุงรูปลักษณ์ของแอป
![](https://developer.android.com/static/images/guide/practices/compatibility-mode/enhanced_letterboxing.png?authuser=5&hl=th)
รูปที่ 2 แอปที่มีแถบดำด้านบน-ล่างของภาพพร้อมการเพิ่มประสิทธิภาพ UI
12L (API ระดับ 32) เพิ่มการปรับปรุงฟังก์ชันต่อไปนี้
ตำแหน่งที่กำหนดค่าได้: ในอุปกรณ์ขนาดใหญ่ ผู้ผลิตอุปกรณ์จะทำสิ่งต่อไปนี้ได้ วางแอปไว้ทางซ้ายหรือขวาของจอแสดงผล ซึ่งทำให้ โต้ตอบได้ง่ายขึ้น
ปุ่มรีสตาร์ทที่ออกแบบใหม่: ผู้ผลิตอุปกรณ์สามารถรีสตาร์ทเครื่อง ปุ่มสำหรับโหมดความเข้ากันได้กับขนาดรูปลักษณ์ใหม่ เพื่อให้ผู้ใช้จดจำได้ดีขึ้น
Android 13 (API ระดับ 33) เพิ่มกล่องโต้ตอบการให้ข้อมูลแก่ผู้ใช้เกี่ยวกับจุดยืนของ แอปมีแถบดำด้านบน-ล่างของภาพบนหน้าจอหรือการรวมแถบดำด้านบน-ล่างของภาพในโหมดแยกหน้าจอ
![](https://developer.android.com/static/images/guide/practices/compatibility-mode/enhanced_letterboxing_user_dialog.png?authuser=5&hl=th)
รูปที่ 3 แอปแบบมีแถบดำด้านบน-ล่างของภาพพร้อมกล่องโต้ตอบความรู้สำหรับผู้ใช้
โหมดความเข้ากันได้กับขนาด
โหมดความเข้ากันได้ของขนาดคือแถบดำด้านบน-ล่างของภาพที่มีตัวควบคุมการรีสตาร์ท ทำให้ผู้ใช้สามารถรีสตาร์ทแอปและแสดงจอแสดงผลอีกครั้ง การเรียกใช้ Android โหมดความเข้ากันได้กับขนาดของแอปที่เราพิจารณาแล้วว่าไม่สามารถปรับขนาดได้ เมื่อ กิจกรรมจะย้ายไปยังคอนเทนเนอร์ของดิสเพลย์ที่ใช้ร่วมกับแท็ก ระบบอาจปรับขนาดแอปให้เต็มหน้าจอของอุปกรณ์ มิติข้อมูลอย่างน้อย 1 รายการ
การเปลี่ยนแปลงการกำหนดค่าอุปกรณ์ที่ทริกเกอร์โหมดความเข้ากันได้ของขนาดได้มีดังนี้ ดังต่อไปนี้
- การหมุนอุปกรณ์
- อุปกรณ์แบบพับได้ขณะพับหรือกางออก
- เปลี่ยนระหว่างโหมดการแสดงผลแบบเต็มหน้าจอกับโหมดแยกหน้าจอ
ปัญหา
โดยทั่วไป โหมดความเข้ากันได้กับขนาดจะใช้กับกิจกรรมที่ถูกจำกัดใน การวางแนวหรืออัตราส่วนกว้างยาวและกำหนดค่า (หรือกำหนดโดยระบบ) เป็น และไม่สามารถปรับขนาดได้
แอปของคุณถือว่าปรับขนาดได้ และจะไม่วางในขนาด โหมดความเข้ากันได้ หากเป็นไปตามเกณฑ์ข้อใดข้อหนึ่งต่อไปนี้
- ปรับขนาดได้โดยใช้
resizeableActivity="true"
- รองรับโหมดการแสดงภาพซ้อนภาพ (PIP)
- เป็นแบบฝัง
- มีการลบล้าง
FORCE_RESIZE_APP
ต่อแอปโดย ผู้ผลิตอุปกรณ์ (พร็อพเพอร์ตี้ที่แอปกำหนดจะถูกละเว้น)
หากแอปไม่เป็นไปตามเงื่อนไขใดๆ จะถือว่าไม่ ที่ปรับขนาดได้ และสามารถวางไว้ในโหมดความเข้ากันได้ของขนาด
![](https://developer.android.com/static/images/guide/practices/compatibility-mode/size_compatibility_mode_issue.gif?authuser=5&hl=th)
แอปที่ปรับขนาดไม่ได้ขัดข้องในโหมดหลายหน้าต่าง
การเพิ่มประสิทธิภาพ
แอปควรรองรับจอแสดงผลทุกขนาด ทำให้แอปของคุณปรับขนาดได้โดยการตั้งค่า
แอตทริบิวต์ android:resizeableActivity
ของ <activity>
หรือ <application>
ให้เป็น true
ใน
ไฟล์ Manifest ของแอป ออกแบบเลย์เอาต์ที่ปรับเปลี่ยนตามอุปกรณ์/ปรับเปลี่ยนได้สำหรับแอป สำหรับข้อมูลเพิ่มเติม
ดูข้อมูลได้ที่
รองรับหน้าจอขนาดต่างๆ และการสนับสนุน
โหมดหลายหน้าต่าง
![](https://developer.android.com/static/images/guide/practices/compatibility-mode/size_compatibility_mode_optimization.gif?authuser=5&hl=th)
แอปทำงานได้กับหน้าต่างทุกขนาด
วิธีแก้ปัญหาความเข้ากันได้
Android จะกำหนดให้แอปอยู่ในโหมดความเข้ากันได้กับขนาดเมื่อระบบระบุ ปรับปรุงการแสดงผลของแอปที่มีแถบดำด้านบน-ล่างของภาพได้โดยปรับขนาดแอปให้เต็ม แสดงในมิติข้อมูลอย่างน้อย 1 รายการ ระบบจะแสดงตัวควบคุมการรีสตาร์ท ซึ่งจะสร้างกระบวนการของแอปขึ้นใหม่ สร้างกิจกรรมใหม่ และเขียนขึ้นมาใหม่ จอแสดงผล ดูข้อมูลเพิ่มเติมที่กระบวนการและภาพรวมของชุดข้อความ
![](https://developer.android.com/static/images/guide/practices/compatibility-mode/size_compatibility_mode_workaround.gif?authuser=5&hl=th)
แอปแนวตั้งเท่านั้นที่มีแถบดำด้านบน-ล่างของภาพในแนวนอน ปรับขนาดใหม่โดยการควบคุมรีสตาร์ท
การกะพริบวนซ้ำ
เมื่อแอปไม่ได้รองรับการวางแนวจอแสดงผลทุกแบบ ก็อาจเกิดซ้ำๆ ขอการวางแนวใหม่เมื่อเกิดการเปลี่ยนแปลงการกำหนดค่า ซึ่งเป็นการสร้าง ลูปที่ไม่สิ้นสุดที่ทำให้จอแสดงผลกะพริบหรือแอปหมุนไม่หยุด
ปัญหา
ใน 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)
และ
ก็เล่นต่อไปเรื่อยๆ ไม่รู้จบ
![](https://developer.android.com/static/images/guide/practices/compatibility-mode/flickering_loops_issue.gif?authuser=5&hl=th)
แอปแนวนอนเท่านั้นในแนวตั้งจะเรียกใช้ Activity#setRequestedOrientation()
ซ้ำ
การเพิ่มประสิทธิภาพ
แอปควรไม่ทำสิ่งต่อไปนี้
- ตั้งค่าการวางแนวเริ่มต้นด้วย
Activity#setRequestedOrientation()
ในส่วน กิจกรรมonCreate()
เนื่องจากคำขอการวางแนวสามารถ ทริกเกอร์โดยการเปลี่ยนแปลงการกำหนดค่าที่ไม่มีการจัดการโดยไม่คาดคิด - สมมติว่าการวางแนวตามธรรมชาติของอุปกรณ์ (
ROTATION_0
) เป็นแนวตั้ง - ตั้งค่าการวางแนวตามสัญญาณที่ไม่เกี่ยวข้องกับขนาดหน้าต่างปัจจุบัน เช่น
ในชื่อ
Display#getRotation()
, มีFoldingFeature
หรือ API ที่เลิกใช้งานแล้ว
![](https://developer.android.com/static/images/guide/practices/compatibility-mode/flickering_loops_optimization.gif?authuser=5&hl=th)
แอปจะจัดการการเปลี่ยนแปลงการกำหนดค่า ไม่มีการจำกัดการวางแนว ดังนั้นจึงไม่ต้องป้อนลูปกะพริบ
วิธีแก้ปัญหาความเข้ากันได้
Android ไม่สนใจสายที่โทรไปยัง Activity#setRequestedOrientation()
ในเงื่อนไขต่อไปนี้
สถานการณ์:
กิจกรรมได้เปิดอีกครั้งแล้วจากการเรียกก่อนหน้าไปยังเมธอด หรือ มีการเปิดใช้การดูแลการหมุนสำหรับกล้อง (โปรดดูส่วนกล้อง) ดูตัวอย่างด้านล่าง)
ผู้ผลิตอุปกรณ์สามารถนำลักษณะการทำงานนี้ไปใช้กับแอปที่มี
OVERRIDE_ENABLE_COMPAT_IGNORE_REQUESTED_ORIENTATION
กิจกรรมนี้ส่งคำขอการวางแนวมากกว่า 2 ครั้งใน 1 วินาที บ่งชี้ว่ามีการวนซ้ำ จากคำขอ 2 รายการที่วนซ้ำ Android ใช้ ส่วนขยายที่ช่วยขยายพื้นที่แสดงผลแอปให้ได้สูงสุด
ผู้ผลิตอุปกรณ์สามารถนำลักษณะการทำงานนี้ไปใช้กับแอปที่มี
OVERRIDE_ENABLE_COMPAT_IGNORE_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED
แสดงตัวอย่างจากกล้องถ่ายรูป
ภาพตัวอย่างจากกล้อง (หรือช่องมองภาพ) ของแอปกล้องอาจวางไม่ตรงหรือบิดเบี้ยว บนแท็บเล็ต แล็ปท็อป และจอแสดงผลแบบพับได้
ปัญหา
เอกสารข้อกำหนดความเข้ากันได้ของ Android ระบุว่า เซ็นเซอร์รูปภาพของกล้อง "ต้องวางในแนวเดียวเพื่อให้ด้านยาวของกล้อง จะอยู่ในแนวเดียวกับขนาดยาวของหน้าจอ"
แอปมักคิดว่าการวางแนวของอุปกรณ์และการวางแนวเซ็นเซอร์ของกล้องเป็น แนวตั้ง เป็นสมมติฐานที่สมเหตุสมผลบนโทรศัพท์มือถือมาตรฐาน แต่ การวางแนวตามธรรมชาติของแท็บเล็ตและแล็ปท็อป และเซ็นเซอร์กล้องอาจ แนวนอน นอกจากนี้ รูปแบบของอุปกรณ์ใหม่ เช่น อุปกรณ์แบบพับได้ และเซ็นเซอร์กล้องหลายตัวในการวางแนวที่แตกต่างกัน
การเริ่มกิจกรรมโดยใช้การวางแนวกล้องที่แอปไม่ได้คาดไว้ หรือ การสลับระหว่างกล้องหรือหน้าจออุปกรณ์ต่างๆ (สำหรับอุปกรณ์แบบพับได้) อาจทำให้ ภาพตัวอย่างจากกล้องผิดตำแหน่งหรือบิดเบี้ยว
![](https://developer.android.com/static/images/guide/practices/compatibility-mode/camera_preview_issue.png?authuser=5&hl=th)
ภาพตัวอย่างจากกล้องที่ไม่ตรงและบิดเบี้ยวบนหน้าจอขนาดใหญ่แบบพับได้
การเพิ่มประสิทธิภาพ
แอปกล้องต้องระบุและจัดการการวางแนวของอุปกรณ์และกล้องให้ถูกต้อง การวางแนวของเซ็นเซอร์เพื่อแสดงตัวอย่างของกล้องถ่ายรูปที่ปรับขนาดและปรับแนวอย่างถูกต้อง แอปต้องคำนวณการหมุนอุปกรณ์ การหมุนเซ็นเซอร์ และหน้าจอหรือหน้าต่าง สัดส่วนภาพ แล้วใช้ผลลัพธ์กับการแสดงตัวอย่างจากกล้อง หากต้องการทราบรายละเอียด คำแนะนำ โปรดดูตัวอย่างจากกล้องและแนะนำกล้อง ช่องมองภาพ
![](https://developer.android.com/static/images/guide/practices/compatibility-mode/camera_preview_optimization.png?authuser=5&hl=th)
ตัวอย่างจากกล้องจัดเรียงและปรับขนาดอย่างถูกต้องในทุกการวางแนวอุปกรณ์
วิธีแก้ปัญหาความเข้ากันได้
วางอุปกรณ์ให้อยู่ในแนวปกติเมื่อ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 มุมมองที่ใช้ในทางที่ผิด:
![](https://developer.android.com/static/images/guide/practices/compatibility-mode/misused_APIs_issue.png?authuser=5&hl=th)
API ที่เลิกใช้งานแล้วคำนวณขอบเขตของแอปไม่ถูกต้อง เนื้อหาแอปแสดงจากหน้าจอ
การเพิ่มประสิทธิภาพ
อย่าพึ่งพาขนาดการแสดงผลจริงในการวางตำแหน่งองค์ประกอบ UI ย้ายข้อมูล
ไปยัง API ที่อิงตาม WindowMetrics
ซึ่งรวมถึงรายการต่อไปนี้
WindowManager
API:
แพลตฟอร์ม:
Jetpack:
![](https://developer.android.com/static/images/guide/practices/compatibility-mode/misused_APIs_optimization.png?authuser=5&hl=th)
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
สามารถ
ใช้สไตล์ที่ทำให้กิจกรรมมีความโปร่งใส
กิจกรรมที่โปร่งใสไม่ครอบคลุมพื้นที่แสดงผลทั้งหมด ซึ่งทำให้ จัดการได้ยากเนื่องจากพื้นที่แสดงผลที่มีอยู่อาจเปลี่ยนแปลงได้ตาม การเปลี่ยนแปลงการกำหนดค่า เช่น การหมุนอุปกรณ์ การพับและกางออกของอุปกรณ์ และ โหมดหลายหน้าต่าง
ปัญหา
กิจกรรมที่โปร่งใสควรสอดคล้องกับขอบเขตของกิจกรรมที่ไม่ชัดเจนครั้งแรก ด้านล่างกิจกรรมที่โปร่งใสในสแต็กกิจกรรมงาน อย่างไรก็ตาม การแสดงผล กิจกรรมที่เปิดกล่องโต้ตอบสิทธิ์ แทรมโพลีน (กิจกรรมที่เปิดกิจกรรมอื่นแล้วหายไป) และ ดังนั้น ระบบไม่สามารถระบุขอบเขตของกิจกรรมแทรมโพลีน ได้เปิดกิจกรรมกล่องโต้ตอบสิทธิ์แบบโปร่งใส
![](https://developer.android.com/static/images/guide/practices/compatibility-mode/transparent_activities_issue.png?authuser=5&hl=th)
กล่องโต้ตอบอยู่ในตำแหน่งที่ผิดพลาดเนื่องจากกิจกรรมเริ่มขึ้นจากแทรมโพลีน
การเพิ่มประสิทธิภาพ
กิจกรรมที่โปร่งใสจะรับค่าข้อจำกัดมาจากความทึบแสงด้านบนสุด กิจกรรมที่อยู่ด้านล่างในกลุ่มกิจกรรมของงาน กิจกรรมทึบแสงต้องเป็น ใช้ได้กับทั้งวงจรของกิจกรรมที่มีความโปร่งใส ตั้งแต่กิจกรรม จนถูกทำลาย ด้วยเหตุนี้ โปรดอย่าเปิดคำขอสิทธิ์จาก กิจกรรมแทรมโพลีน
ถ้ากิจกรรมแทรมโพลีนเปิดคำขอสิทธิ์ ผู้ใช้อาจไม่ สามารถดูกล่องโต้ตอบสิทธิ์ เนื่องจากกิจกรรมแทรมโพลีนจะ ถูกทำลายก่อนที่ผู้ใช้จะได้มีโอกาสตอบโต้กล่องโต้ตอบ และ ระบบอาจคำนวณมิติข้อมูลและตำแหน่งของกิจกรรมในกล่องโต้ตอบ ไม่ถูกต้อง
แอปควรส่งคำขอสิทธิ์จากกิจกรรมที่ยังเหลืออยู่ ปรากฏจนกว่าผู้ใช้จะตัดสินใจอนุญาต
มุมโค้งมน
กิจกรรมอาจโปร่งใสเนื่องจากรูปแบบที่ระบุพื้นหลัง ความโปร่งใสหรือเนื่องจากเนื้อหาของกิจกรรมไม่ตรงกับ พื้นที่แสดงผล หากกิจกรรมโปร่งใสเต็มพื้นที่แสดงผลที่มีอยู่ ระบบจะใช้มุมโค้งมนกับกิจกรรมโดยอัตโนมัติเมื่อกําหนดค่าเป็น โดยผู้ผลิตอุปกรณ์ แต่หากกิจกรรมที่โปร่งใส (เช่น กล่องโต้ตอบสิทธิ์) ไม่พอดีกับพื้นที่ที่มีอยู่ คุณเป็นคนตัดสินใจ จะใช้มุมโค้งมนหรือไม่
กล่องโต้ตอบสิทธิ์ไม่เต็มพื้นที่แสดงผลที่มีอยู่เนื่องจากกล่องโต้ตอบ โดยปกติจะใช้ LayoutParams.WRAP_CONTENT มากกว่า LayoutParams.MATCH_PARENT
![](https://developer.android.com/static/images/guide/practices/compatibility-mode/transparent_activities_optimization.png?authuser=5&hl=th)
กล่องโต้ตอบที่มีมุมโค้งมนอยู่ในตำแหน่งที่ถูกต้องเหนือกิจกรรมการเปิดใช้งานที่มองเห็นได้
วิธีแก้ปัญหาความเข้ากันได้
แสดงกิจกรรมที่เปิดกิจกรรมในกล่องโต้ตอบไว้จนกว่าผู้ใช้จะ ตอบกลับกล่องโต้ตอบแล้ว
ระบบจะดูแลให้กิจกรรมที่โปร่งใสได้รับข้อจำกัดทั้งหมดจาก กิจกรรมแรกที่ทึบแสงใต้กิจกรรมที่โปร่งใสในกลุ่มกิจกรรม รวมถึงข้อจำกัดที่เกี่ยวข้องกับสิ่งต่อไปนี้
- โหมดความเข้ากันได้กับขนาด
- การวางแนว
- สัดส่วนภาพ
เกม Unity
เกม Unity จะทำงานในโหมดเต็มหน้าจอของ Android หรือในโหมดหลายหน้าต่าง อย่างไรก็ตาม เกม Unity หลายเกมเสียสมาธิและหยุดวาดเนื้อหาเมื่อวางแอป โหมดหลายหน้าต่าง
ปัญหา
Unity ได้เพิ่ม Resizable Window
ใน Unity 2019.4 เพื่อรองรับโหมดหลายหน้าต่างใน Android อย่างไรก็ตาม
การติดตั้งใช้งานเริ่มต้นไม่ตอบสนองต่อวงจรของกิจกรรมใน
โหมดหลายหน้าต่างอย่างถูกต้อง ซึ่งทำให้
UnityPlayer เพื่อระงับการเล่นเมื่อแอปหลุดโฟกัส โปรแกรมเล่นแสดงผล
หน้าจอสีดำหรือเฟรมสุดท้ายของเกมที่ค้าง เกมเพลย์จะกลับมาทำงานอีกครั้งเมื่อ
ผู้ใช้แตะหน้าจอ แอปจำนวนมากที่ใช้เครื่องมือ Unity พบปัญหานี้และ
แสดงผลเป็นหน้าต่างสีดำในโหมดหลายหน้าต่าง
![](https://developer.android.com/static/images/guide/practices/compatibility-mode/unity_games_issue.gif?authuser=5&hl=th)
เกมสูญเสียโฟกัสในโหมดหลายหน้าต่างและแสดงเป็นหน้าต่างสีดำ
การเพิ่มประสิทธิภาพ
อัปเกรด Unity เป็น 2019.4.40 ขึ้นไปและส่งออกเกมอีกครั้ง เก็บ
ตัวเลือก Resizable Window
เช็คอินใน
การตั้งค่าโปรแกรมเล่น Android มิฉะนั้น
เกมจะหยุดชั่วคราวเมื่อไม่ได้อยู่ในโฟกัสแม้ว่าเกมจะมองเห็น
โหมดหลายหน้าต่าง
![](https://developer.android.com/static/images/guide/practices/compatibility-mode/unity_games_optimization.gif?authuser=5&hl=th)
เกมแสดงผลเนื้อหาได้อย่างถูกต้องในโหมดหลายหน้าต่างแม้ในขณะที่ไม่ได้อยู่ในโฟกัส
วิธีแก้ปัญหาความเข้ากันได้
ผู้ผลิตอุปกรณ์สามารถใช้
OVERRIDE_ENABLE_COMPAT_FAKE_FOCUS
ลบล้างต่อแอปเพื่อระบุกิจกรรมโฟกัสปลอมให้แก่แอปใน
โหมดหลายหน้าต่าง การลบล้างจะทำให้กิจกรรมดึงเนื้อหาและ
ห้ามปิดทับ
ทดสอบแอปเพื่อดูปัญหาด้านความเข้ากันได้
หากต้องการทดสอบแอปและทำความเข้าใจลักษณะการทำงานในอุปกรณ์รูปแบบต่างๆ ให้ใช้ จากแหล่งข้อมูลต่อไปนี้
- การสตรีมอุปกรณ์: เพื่อทดสอบแอปในอุปกรณ์เวอร์ชันที่ใช้งานจริง (รวมถึง อุปกรณ์อ้างอิง) ที่โฮสต์ในศูนย์ข้อมูลของ Google โปรดดู สตรีมมิงบนอุปกรณ์ Android ที่ขับเคลื่อนโดย Firebase
- โปรแกรมจำลองใน Android Studio Hedgehog: สำหรับข้อมูลเกี่ยวกับการสร้าง โปรแกรมจำลองสำหรับอุปกรณ์อ้างอิง โปรดดู สร้างและจัดการอุปกรณ์เสมือน
- โปรแกรมจำลองที่ปรับขนาดได้ของ Android Studio: สำหรับข้อมูลเกี่ยวกับการเข้าถึงระบบเสมือน โปรดดูที่เรียกใช้แอปบนโปรแกรมจำลองของ Android
มีแถบดำด้านบน-ล่างของภาพ
ตรวจสอบว่าแต่ละกิจกรรมใช้พื้นที่แสดงผลทั้งหมดที่มีอยู่ของแอปได้ ขั้นแรก ให้ประกาศรหัสต่อไปนี้ในโฟลเดอร์ทดสอบของคุณ:
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>
หมายเหตุ: คําสั่งจะใช้ชั่วคราวหรือนำการลบล้างออกเท่านั้น
โอเวอร์ไรด์_ตำแหน่งใดๆ
เปิดใช้งานการลบล้างต่อไปนี้เพื่อลบล้างการวางแนว
- OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT
- OVERRIDE_UNDEFINED_ORIENTATION_TO_NOSENSOR
- OVERRIDE_LANDSCAPE_ORIENTATION_TO_REVERSE_LANDSCAPE
วิธีที่แอปจะได้รับผลลัพธ์เดียวกันกับการลบล้าง
ตั้งค่าแอตทริบิวต์ไฟล์ 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>
หมายเหตุ: คําสั่งจะใช้ชั่วคราวหรือนำการลบล้างออกเท่านั้น
แหล่งข้อมูลเพิ่มเติม
- หลักเกณฑ์ด้านคุณภาพสำหรับแอปที่มีหน้าจอขนาดใหญ่
- หลักเกณฑ์ด้านคุณภาพสำหรับแอปหลัก