Android จะเปิดใช้งานโหมดความเข้ากันได้สำหรับแอปที่ประกาศข้อจำกัดเกี่ยวกับการวางแนวหรือการปรับขนาด โหมดความเข้ากันได้ช่วยให้แอปทำงานได้อย่างยอมรับได้ในอุปกรณ์หน้าจอขนาดใหญ่และโทรศัพท์แบบพับได้ แต่อาจใช้งานได้ไม่สะดวก
การลบล้างต่อแอปช่วยให้ผู้ผลิตอุปกรณ์เปลี่ยนลักษณะการทำงานของแอปเพื่อปรับปรุงประสบการณ์ของผู้ใช้หรือป้องกันไม่ให้แอปขัดข้องในอุปกรณ์บางเครื่อง
อุปกรณ์อ้างอิง
อุปกรณ์ต่อไปนี้อาจต้องลบล้างต่อแอปเนื่องจากมีการกำหนดค่าที่ผิดปกติหรือการกำหนดค่าที่แอปรองรับไม่ได้มากนัก
- แท็บเล็ต: การวางแนวตามปกติของแท็บเล็ตบางรุ่น เช่น Pixel Tablet จะเป็นแนวนอน อุปกรณ์อยู่ในแนวตั้งตามปกติเมื่อ
Display#getRotation()
แสดงขึ้นSurface.ROTATION_0
หากแอปถือว่าROTATION_0
เป็นแนวตั้ง เลย์เอาต์แอปและพรีวิวของกล้องอาจไม่ตรงกับการแสดงผลของอุปกรณ์ - อุปกรณ์แบบพับได้แนวนอน: อุปกรณ์แบบพับได้บางรุ่น เช่น Pixel Fold จะอยู่ในแนวตั้งเมื่อพับอยู่ แต่อยู่ในแนวนอนเมื่อกางออก หากแอปคิดว่าการวางแนวที่กางออกเป็นแนวตั้ง ปัญหาอาจเกิดจากการกะพริบหลายครั้งหรือปัญหาเลย์เอาต์
- โทรศัพท์ฝาพับแบบพับได้: โทรศัพท์ฝาพับที่กางออกมักจะอยู่ในแนวตั้ง แต่เมื่อพับ โทรศัพท์มักจะมีหน้าจอขนาดเล็กอยู่ในแนวนอน แอปต้องระบุและรองรับ การวางแนวที่แตกต่างกันของจอแสดงผล
ปัญหาความเข้ากันได้ที่พบได้ทั่วไป
แอปพบปัญหาความเข้ากันได้บ่อยที่สุดเนื่องจากข้อจำกัดด้านการวางแนวของแอป ข้อจำกัดด้านความสามารถในการปรับขนาดและสัดส่วนภาพ การจัดการการวางแนวตัวอย่างของกล้องที่ไม่ถูกต้อง รวมถึง API ที่ใช้ในทางที่ผิด
เล็ทเทอร์บ็อกซิง
แถบดำด้านบน-ล่างของภาพวางตำแหน่งแอปไว้ตรงกลางหน้าจอหรือบนหน้าจอขนาดใหญ่ โดยให้อยู่ด้านใดด้านหนึ่งเพื่อการเข้าถึงที่สะดวก พื้นหลัง (แถบสีทึบหรือวอลเปเปอร์เบลอ) จะเติมพื้นที่แสดงผลที่ไม่ได้ใช้ตามขอบหรือด้านบนและด้านล่างของแอป
แถบดำด้านบน-ล่างของภาพมักเกิดขึ้นบนอุปกรณ์ที่มีหน้าจอขนาดใหญ่ เนื่องจากขนาดและอัตราส่วนของจอแสดงผลของอุปกรณ์มักแตกต่างจากโทรศัพท์มาตรฐาน ซึ่งแอปส่วนใหญ่ได้รับการออกแบบมา
ปัญหา
แอปไม่รองรับการกำหนดค่าการแสดงผลบางรายการเนื่องจากแอปมีการวางแนวแบบคงที่ อัตราส่วนการแสดงผลแบบคงที่ หรือปรับขนาดไม่ได้
การตั้งค่าการกําหนดค่าที่ควบคุมการวางแนวของแอปและความสามารถในการปรับขนาดมีดังนี้
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) มีการปรับปรุงด้านความสวยงามต่อไปนี้ ซึ่งผู้ผลิตอุปกรณ์สามารถกำหนดค่าได้
- มุมโค้งมน: มุมของหน้าต่างแอปดูกลมกลืนมากขึ้น
- ความโปร่งใสของแถบระบบ: สถานะและแถบนำทางซึ่งวางซ้อนแอปจะเป็นแบบกึ่งโปร่งใส ทำให้ไอคอนบนแถบต่างๆ มองเห็นได้เสมอบนพื้นหลังที่มีแถบดำด้านบน-ล่างของภาพ
- สัดส่วนการแสดงผลที่กำหนดค่าได้: คุณปรับสัดส่วนการแสดงผลของแอปเพื่อปรับปรุงรูปลักษณ์ของแอปได้
12L (API ระดับ 32) เพิ่มการปรับปรุงฟังก์ชันต่อไปนี้
การจัดตำแหน่งที่กำหนดค่าได้: ในหน้าจอขนาดใหญ่ ผู้ผลิตอุปกรณ์สามารถวางตำแหน่งแอปไว้ทางด้านซ้ายหรือขวาของจอแสดงผลได้ ซึ่งทำให้การโต้ตอบทำได้ง่ายขึ้น
ปุ่มรีสตาร์ทที่ออกแบบใหม่: ผู้ผลิตอุปกรณ์สามารถปรับให้ปุ่มรีสตาร์ทสำหรับโหมดความเข้ากันได้ของขนาดมีรูปลักษณ์ใหม่เพื่อให้ผู้ใช้จดจำได้ดีขึ้น
Android 13 (API ระดับ 33) เพิ่มกล่องโต้ตอบการให้ข้อมูลแก่ผู้ใช้เกี่ยวกับการวางตำแหน่งแอปมีแถบดำด้านบน-ล่างของภาพบนหน้าจอ หรือการรวมแถบดำด้านบน-ล่างของภาพในโหมดแยกหน้าจอ
โหมดความเข้ากันได้ของขนาด
โหมดความเข้ากันได้ของขนาดคือแถบดำด้านบน-ล่างของภาพที่มีการควบคุมการรีสตาร์ท ซึ่งการควบคุมช่วยให้ผู้ใช้รีสตาร์ทแอปและนำจอแสดงผลมาใช้ซ้ำได้ Android จะเรียกใช้โหมดความเข้ากันได้ของขนาดสำหรับแอปที่ระบบพิจารณาว่าปรับขนาดไม่ได้ เมื่อกิจกรรมย้ายไปยังคอนเทนเนอร์การแสดงผลที่เข้ากันไม่ได้กับมิติข้อมูลของกิจกรรม ระบบอาจปรับขนาดแอปใหม่ให้เต็มพื้นที่แสดงผลของอุปกรณ์ในมิติข้อมูลอย่างน้อย 1 มิติ
การเปลี่ยนแปลงการกำหนดค่าอุปกรณ์ที่อาจทริกเกอร์โหมดความเข้ากันได้ของขนาดมีดังนี้
- การหมุนอุปกรณ์
- อุปกรณ์แบบพับได้กำลังพับหรือกางออก
- เปลี่ยนระหว่างโหมดการแสดงผลแบบเต็มหน้าจอและแบบแยกหน้าจอ
ปัญหา
โดยปกติแล้ว โหมดความเข้ากันได้ของขนาดจะมีผลกับกิจกรรมที่ถูกจำกัดในแกนแนวตั้งหรือสัดส่วนภาพ และได้รับการกําหนดค่า (หรือระบบเป็นผู้กําหนด) ให้ปรับขนาดไม่ได้
แอปของคุณถือว่าปรับขนาดได้ และจะไม่อยู่ในโหมดความเข้ากันได้กับขนาด หากเป็นไปตามเกณฑ์ข้อใดข้อหนึ่งต่อไปนี้
- ปรับขนาดได้โดยใช้
resizeableActivity="true"
- รองรับโหมดการแสดงภาพซ้อนภาพ (PIP)
- เป็นแบบฝัง
- ผู้ผลิตอุปกรณ์ใช้การลบล้าง
FORCE_RESIZE_APP
ต่อแอป (ระบบจะไม่สนใจพร็อพเพอร์ตี้ที่แอปกำหนด)
หากแอปไม่เป็นไปตามเงื่อนไขใดๆ ระบบจะถือว่าแอปปรับขนาดไม่ได้และอยู่ในโหมดความเข้ากันได้กับขนาด
การเพิ่มประสิทธิภาพ
แอปควรรองรับขนาดการแสดงผลทั้งหมด ทำให้แอปปรับขนาดได้โดยการกําหนดแอตทริบิวต์ android:resizeableActivity
ขององค์ประกอบ <activity>
หรือ <application>
เป็น true
ในไฟล์ Manifest ของแอป ออกแบบเลย์เอาต์ที่ปรับเปลี่ยนตามอุปกรณ์/ปรับเปลี่ยนได้สำหรับแอป ดูข้อมูลเพิ่มเติมได้ที่รองรับขนาดหน้าจอที่ต่างกันและรองรับโหมดหลายหน้าต่าง
วิธีแก้ปัญหาความเข้ากันได้
Android จะวางแอปในโหมดความเข้ากันได้ของขนาดเมื่อระบบเห็นว่าสามารถปรับปรุงการแสดงผลของแอปที่มีแถบดำด้านบน-ล่างของภาพได้โดยปรับขนาดแอปให้เต็มหน้าต่างแสดงผลในมิติข้อมูลอย่างน้อย 1 รายการ ระบบจะแสดงการควบคุมการรีสตาร์ท ซึ่งจะสร้างกระบวนการของแอปขึ้นใหม่ สร้างกิจกรรมขึ้นมาใหม่ และวาดการแสดงผลอีกครั้ง โปรดดูภาพรวมกระบวนการและเธรดด้วย
การกะพริบวนซ้ำ
เมื่อแอปไม่รองรับการวางแนวจอแสดงผลทั้งหมด แอปอาจขอการวางแนวใหม่ซ้ำๆ เมื่อเกิดการเปลี่ยนแปลงการกำหนดค่า ซึ่งทำให้เกิดลูปที่ไม่สิ้นสุดที่ทำให้จอแสดงผลกะพริบหรือแอปจะหมุนไม่สิ้นสุด
ปัญหา
ใน Android 12 (API ระดับ 31) ขึ้นไป ผู้ผลิตอุปกรณ์สามารถกำหนดค่าอุปกรณ์ให้ละเว้นข้อจำกัดด้านการวางแนวที่ระบุไว้โดยแอป และบังคับใช้โหมดความเข้ากันได้แทน เช่น อุปกรณ์แบบพับได้อาจไม่สนใจการตั้งค่า android:screenOrientation="portrait"
ของกิจกรรม เมื่อกิจกรรมนั้นแสดงในหน้าจอด้านในขนาดแท็บเล็ตแนวนอนของอุปกรณ์
หากไม่คำนึงถึงข้อจำกัดด้านการวางแนวของแอป แอปจะกำหนดการวางแนวแบบเป็นโปรแกรมได้ด้วยการเรียกใช้ Activity#setRequestedOrientation()
การเรียกใช้จะทริกเกอร์การรีสตาร์ทแอปหากแอปไม่ได้จัดการการเปลี่ยนแปลงการกำหนดค่า (ดูจัดการการเปลี่ยนแปลงการกำหนดค่า) หลังจากรีสตาร์ทแล้ว ระบบจะไม่สนใจข้อจำกัดด้านการวางแนวของแอปอีกครั้ง แอปจะเรียกไปยัง setRequestedOrientation()
ซ้ำ การโทรจะทริกเกอร์ให้แอปรีสตาร์ท และต่อเนื่องไปเรื่อยๆ ในลูปที่สิ้นสุดด้วยตนเอง
อีกกรณีที่คุณอาจพบปัญหานี้ก็คือเมื่อการวางแนวตามปกติ (การวางแนวปกติตามที่ Android กำหนด) ของหน้าจออุปกรณ์เป็นแนวนอน (กล่าวคือ การเรียกใช้ Display#getRotation()
จะแสดงผลเป็น Surface.ROTATION_0
ขณะที่อุปกรณ์มีสัดส่วนการแสดงผลแนวนอน) ที่ผ่านมา แอปต่างๆ ถือว่า Display.getRotation() =
Surface.ROTATION_0
หมายความว่าอุปกรณ์อยู่ในแนวตั้ง แต่ก็ไม่ได้เป็นเช่นนั้นเสมอไป เช่น ในหน้าจอด้านในของอุปกรณ์แบบพับได้บางรุ่นและในแท็บเล็ตบางรุ่น
แอปในแนวนอนบนจอแสดงผลด้านในแบบพับได้อาจตรวจสอบการหมุนหน้าจอ ได้รับค่า ROTATION_0
สมมติว่าการวางแนวตามปกติของอุปกรณ์คือแนวตั้ง และเรียกใช้ setRequestedOrientation(
ActivityInfo.SCREEN_ORIENTATION_PORTRAIT
)
เพื่อกำหนดค่าเลย์เอาต์แอปใหม่ หลังจากที่รีสตาร์ทแอป (ในแนวนอน) แอปอาจตรวจสอบการหมุนหน้าจออีกครั้ง รับค่า ROTATION_0
เรียกใช้ setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT)
และวนซ้ำไปเรื่อยๆ
การเพิ่มประสิทธิภาพ
แอปไม่ควรทำสิ่งต่อไปนี้
- ตั้งค่าการวางแนวเริ่มต้นด้วย
Activity#setRequestedOrientation()
ในเมธอดonCreate()
ของกิจกรรม เนื่องจากอาจทริกเกอร์คำขอการวางแนวโดยไม่คาดคิดจากการเปลี่ยนแปลงการกำหนดค่าที่ไม่มีการจัดการ - สมมติว่าการวางแนวธรรมชาติของอุปกรณ์ (
ROTATION_0
) คือแนวตั้ง - ตั้งค่าการวางแนวโดยอิงตามสัญญาณที่ไม่เกี่ยวข้องกับขนาดหน้าต่างปัจจุบัน เช่น
Display#getRotation()
, การแสดงFoldingFeature
หรือ API ที่เลิกใช้งานแล้ว
วิธีแก้ปัญหาความเข้ากันได้
Android จะไม่สนใจการเรียก Activity#setRequestedOrientation()
ในสถานการณ์ต่อไปนี้
กิจกรรมเปิดขึ้นมาใหม่แล้วจากการเรียกใช้เมธอดก่อนหน้านี้ หรือมีการเปิดใช้การจัดการการบังคับให้หมุนของกล้องที่เข้ากันได้ (ดูการแสดงตัวอย่างจากกล้องด้านล่าง)
ผู้ผลิตอุปกรณ์สามารถใช้ลักษณะการทํางานนี้กับแอปที่มี
OVERRIDE_ENABLE_COMPAT_IGNORE_REQUESTED_ORIENTATION
กิจกรรมส่งคําขอการวางแนวมากกว่า 2 ครั้งใน 1 วินาที ซึ่งบ่งชี้ว่าเกิดลูปขึ้น จาก 2 คำขอในลูป Android จะใช้คำขอที่เพิ่มพื้นที่แสดงผลของแอปให้ได้สูงสุด
ผู้ผลิตอุปกรณ์สามารถใช้ลักษณะการทํางานนี้กับแอปที่มี
OVERRIDE_ENABLE_COMPAT_IGNORE_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED
แสดงตัวอย่างจากกล้องถ่ายรูป
การแสดงตัวอย่างจากกล้อง (หรือช่องมองภาพ) ของแอปกล้องอาจไม่สอดคล้องกันหรือบิดเบี้ยวในแท็บเล็ต แล็ปท็อป และจอแสดงผลแบบพับได้
ปัญหา
เอกสารคำจำกัดความความเข้ากันได้ของ Android ระบุว่าเซ็นเซอร์รูปภาพของกล้อง "ต้องวางแนวเพื่อให้ขนาดยาวของกล้องสอดคล้องกับขนาดยาวของหน้าจอ"
แอปมักถือว่าการวางแนวของอุปกรณ์และการวางแนวเซ็นเซอร์กล้องเป็นแนวตั้ง ซึ่งเป็นการวางแนวที่สมเหตุสมผลสำหรับโทรศัพท์มือถือมาตรฐาน แต่การวางแนวตามปกติของแท็บเล็ตและแล็ปท็อป รวมถึงเซ็นเซอร์กล้องของอุปกรณ์เหล่านี้อาจเป็นแนวนอน นอกจากนี้ รูปแบบของอุปกรณ์ใหม่ๆ เช่น อุปกรณ์แบบพับได้อาจมีการวางแนวตามปกติหลายแบบและเซ็นเซอร์กล้องหลายตัวในแนวที่ต่างกัน
การเริ่มกิจกรรมโดยใช้การวางแนวกล้องที่แอปไม่คาดคิดหรือการสลับระหว่างกล้องหรือหน้าจออุปกรณ์ต่างๆ (สำหรับอุปกรณ์แบบพับได้) อาจทำให้เกิดภาพตัวอย่างจากกล้องที่ไม่ตรงแนวหรือบิดเบี้ยว
การเพิ่มประสิทธิภาพ
แอปกล้องต้องระบุและจัดการการวางแนวของอุปกรณ์และการวางแนวเซ็นเซอร์กล้องให้ถูกต้องเพื่อแสดงตัวอย่างกล้องที่ปรับขนาดและอยู่ในแนวที่ถูกต้อง แอปต้องคำนวณการหมุนอุปกรณ์ การหมุนเซ็นเซอร์ และอัตราส่วนหน้าจอหรือหน้าต่าง จากนั้นนำผลลัพธ์ไปใช้กับการแสดงตัวอย่างของกล้อง ดูคำแนะนำโดยละเอียดได้ที่แสดงตัวอย่างจากกล้องและแนะนำช่องมองภาพของกล้อง
วิธีแก้ปัญหาความเข้ากันได้
อุปกรณ์อยู่ในแนวตั้งตามปกติเมื่อ Display#getRotation()
แสดงผล Surface.ROTATION_0
ระบบจะคํานวณจากการวางแนวตามธรรมชาติของอุปกรณ์
CameraCharacteristics.SENSOR_ORIENTATION
Android จะจัดแนวหน้าต่างแนวตั้งของแอปที่จำกัดให้แสดงในแนวตั้งให้สอดคล้องกับการวางแนวตามปกติของอุปกรณ์ ซึ่งเป็นลักษณะที่แอปส่วนใหญ่ต้องการ นอกจากนี้ Android ยังครอบตัดรูปภาพจากเซ็นเซอร์กล้องเมื่อการวางแนวเซ็นเซอร์เป็นแนวนอนและการแสดงตัวอย่างจากกล้องเป็นแนวตั้ง วิธีแก้ปัญหาเฉพาะหน้ามีดังต่อไปนี้
บังคับให้หมุนตัวอย่างจากกล้องสำหรับแอปที่จำกัดแนวตั้ง: แอปที่จำกัดให้อยู่ในแนวตั้งจะต้องวางการวางแนวตามธรรมชาติของอุปกรณ์และการวางแนวเซ็นเซอร์ของกล้องจะเป็นแนวตั้ง อย่างไรก็ตาม ใน Android 12 (API ระดับ 31) ขึ้นไป แอปจะทำงานในแนวการวางของอุปกรณ์ได้หลายแบบหากผู้ผลิตอุปกรณ์ไม่สนใจข้อกำหนดการวางแนว
เมื่อเชื่อมต่อแอปที่จํากัดแนวตั้งกับกล้อง Android จะบังคับให้แอปหมุนแอปเพื่อปรับหน้าต่างแนวตั้งของแอปให้ตรงกับการวางแนวตามธรรมชาติของอุปกรณ์
ในแท็บเล็ตบางรุ่น (ดูอุปกรณ์อ้างอิง) ระบบจะหมุนหน้าต่างแนวตั้งของแอปเป็นแนวตั้งแบบเต็มหน้าจอเพื่อให้สอดคล้องกับการวางแนวตามปกติของอุปกรณ์ แอปแสดงเต็มหน้าจอหลังจากบังคับหมุน
ในหน้าจอแนวนอนที่อยู่ด้านในของอุปกรณ์แบบพับได้ (ดูอุปกรณ์อ้างอิง) กิจกรรมแนวตั้งเท่านั้นจะหมุนไปเป็นแนวนอนเพื่อปรับให้เข้ากับการวางแนวตามธรรมชาติที่กางออก แอปมีแถบดำด้านบนและด้านล่างหลังจากบังคับให้หมุน
การครอบตัดกล้องหน้าด้านใน: เซ็นเซอร์กล้องหน้าด้านในบนอุปกรณ์แบบพับได้บางรุ่นอยู่ในแนวนอน นอกจากการบังคับหมุนภาพพรีวิวของกล้องบนจอแสดงผลด้านในแบบพับได้แล้ว Android ยังครอบตัดขอบเขตการมองเห็นของกล้องหน้าด้านใน (แนวนอน) เพื่อให้เซ็นเซอร์จับภาพมุมมองที่ตรงข้ามกับการวางแนวของอุปกรณ์
บังคับรีเฟรชตัวอย่างกล้อง: ระบบจะวนผ่านเมธอดกิจกรรม
onStop()
และonStart()
(โดยค่าเริ่มต้น) หรือonPause()
และonResume()
(ใช้โดย OVERRIDE_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE การลบล้างระดับแอป) หลังจากบังคับหมุนเพื่อให้แน่ใจว่าตัวอย่างกล้องแสดงอย่างถูกต้องการปรับสัดส่วนภาพ: ระบบจะเปลี่ยนสัดส่วนภาพของตัวอย่างภาพจากกล้องที่บังคับให้หมุนแบบไดนามิกเป็นสัดส่วนภาพขั้นต่ำที่สูงขึ้น ซึ่งช่วยให้มั่นใจได้ว่าตัวอย่างภาพจากกล้องจะปรับขนาดอย่างเหมาะสม
นักพัฒนาแอปสามารถลบล้างวิธีแก้ปัญหาเหล่านี้ได้หากแอปจัดการการแสดงตัวอย่างจากกล้องอย่างถูกต้อง ดูการลบล้างต่อแอป
API ที่มักถูกละเมิด
เนื่องจาก Android ได้เพิ่มการรองรับฟีเจอร์ต่างๆ เช่น โหมดหลายหน้าต่างและอุปกรณ์ต่างๆ อย่างอุปกรณ์แบบพับได้ เราจึงเลิกใช้งาน API เดิมและแทนที่ด้วย API ล่าสุดที่ใช้งานได้กับจอแสดงผลทุกขนาดและอุปกรณ์ทุกรูปแบบ อย่างไรก็ตาม API ที่เลิกใช้งานแล้วยังคงใช้ได้กับความเข้ากันได้แบบย้อนหลัง
API ของ View
บางรายการออกแบบมาเพื่อวัตถุประสงค์พิเศษซึ่งนักพัฒนาซอฟต์แวร์อาจไม่เข้าใจเป็นอย่างดีเสมอไป
ปัญหา
นักพัฒนาแอปยังคงใช้ Display
API ที่เลิกใช้งานและเข้าใจผิดว่า API จะแสดงผลขอบเขตของแอปแทนขอบเขตพื้นที่แสดงผลของอุปกรณ์ หรือนักพัฒนาซอฟต์แวร์ใช้ API มุมมองที่มีวัตถุประสงค์พิเศษในการรับเมตริกการแสดงผลทั่วไปผิด
ผลลัพธ์ที่ได้คือการคำนวณที่ไม่ถูกต้องเมื่อจัดตำแหน่งองค์ประกอบ UI ใหม่หลังจากเหตุการณ์การปรับขนาดหน้าต่างแอป ซึ่งทำให้เกิดปัญหาการจัดวาง
Display API ที่เลิกใช้งานแล้วและใช้ในทางที่ผิด:
ดูข้อมูลเพิ่มเติมได้ที่รองรับโหมดหลายหน้าต่าง
API มุมมองที่ใช้ในทางที่ผิด:
การเพิ่มประสิทธิภาพ
อย่าพึ่งพาขนาดการแสดงผลจริงในการวางตำแหน่งองค์ประกอบ UI ย้ายข้อมูลแอปไปยัง API ตาม WindowMetrics
ซึ่งรวมถึงWindowManager
API ต่อไปนี้
แพลตฟอร์ม:
Jetpack
วิธีแก้ปัญหาความเข้ากันได้
การลบล้าง 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
สามารถรวมสไตล์ที่ทำให้กิจกรรมมีความโปร่งใส
กิจกรรมที่โปร่งใสไม่ครอบคลุมพื้นที่แสดงผลทั้งหมด ซึ่งทำให้จัดการได้ยากเนื่องจากพื้นที่แสดงผลที่มีอยู่อาจเปลี่ยนแปลงได้ตามการเปลี่ยนแปลงการกำหนดค่า เช่น การหมุนอุปกรณ์ การพับและกางอุปกรณ์ และโหมดหลายหน้าต่าง
ปัญหา
กิจกรรมที่โปร่งใสควรสอดคล้องกับขอบเขตของกิจกรรมที่ไม่ชัดเจนแรกใต้กิจกรรมที่โปร่งใสในกลุ่มกิจกรรมงาน อย่างไรก็ตาม กิจกรรมทึบแสงที่เปิดกล่องโต้ตอบสิทธิ์อาจเป็นกิจกรรม 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
ต่อการลบล้างระดับแอปเพื่อให้เหตุการณ์โฟกัสปลอมแก่แอปในโหมดหลายหน้าต่าง การลบล้างทำให้กิจกรรมสามารถวาดเนื้อหาซ้ำและไม่ปิดทับ
ทดสอบแอปเพื่อหาปัญหาความเข้ากันได้
หากต้องการทดสอบแอปและทำความเข้าใจลักษณะการทํางานของแอปในอุปกรณ์รูปแบบต่างๆ ให้ใช้ประโยชน์จากแหล่งข้อมูลต่อไปนี้
- การสตรีมอุปกรณ์: หากต้องการทดสอบแอปในอุปกรณ์เวอร์ชันที่ใช้งานจริง (รวมถึงอุปกรณ์อ้างอิง) ที่โฮสต์ในศูนย์ข้อมูลของ 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 ของแอปเพื่อเลือกไม่ใช้การลบล้างบางรายการได้
การลบล้างสำหรับแต่ละแอป | |||
---|---|---|---|
ประเภท | ชื่อ | รหัส | คำอธิบาย |
ความสามารถในการปรับขนาด | 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 | ป้องกันไม่ให้มีแถบดำด้านบน-ล่างของภาพโดยการไม่อนุญาตให้ผู้ผลิตอุปกรณ์ละเว้นการตั้งค่าคำขอการวางแนว | |
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
ให้ตั้งค่าแฟล็กข้อมูลเมตา 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_ONLY
จำกัดการตั้งค่าแอปที่บังคับใช้อัตราส่วนภาพขั้นต่ำที่กำหนดสำหรับกิจกรรมที่มีการวางแนวเป็นแนวตั้งเท่านั้น เปิดใช้โดยค่าเริ่มต้นและจะมีผลก็ต่อเมื่อเปิดใช้ 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
คำสั่ง 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
แฟล็กพร็อพเพอร์ตี้ที่จะปรับการลบล้าง
คำสั่ง 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
แฟล็กพร็อพเพอร์ตี้ที่จะปรับการลบล้าง
คำสั่ง 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
ปิดใช้การลบล้างอัตราส่วนขั้นต่ำในโหมดเต็มหน้าจอแนวตั้งเพื่อใช้พื้นที่หน้าจอที่มีอยู่ทั้งหมด
วิธีที่แอปจะได้รับผลลัพธ์เดียวกันกับการลบล้าง
วิธีเพิ่มประสิทธิภาพแอป
วิธีปิดใช้หรือเลือกไม่ใช้การลบล้าง
แฟล็กพร็อพเพอร์ตี้ที่จะปรับการลบล้าง
คำสั่ง 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 ขึ้นไป การกำหนดค่าอุปกรณ์ลบล้างการวางแนวคงที่ได้ ดูข้อมูลเพิ่มเติมเกี่ยวกับการจัดการการเปลี่ยนแปลงการกำหนดค่าและการรองรับการวางแนวทั้งหมดได้ที่จัดการการเปลี่ยนแปลงการกำหนดค่า, ภาพรวม 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_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
เปิดใช้การวางแนวโนเซ็นเซอร์สำหรับกิจกรรมทั้งหมดในแพ็กเกจ หากไม่ได้เปิดใช้ 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 เพื่อปิดใช้การลบล้าง
แฟล็กพร็อพเพอร์ตี้ที่จะปรับการลบล้าง
ไม่มี 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
บังคับให้แพ็กเกจไม่ใช้แซนด์บ็อกซ์ API ของ Display
สำหรับกิจกรรมโหมดความเข้ากันได้กับแบบ 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 เสมอไม่ว่าจะใช้โหมดการแบ่งกรอบเวลาใดก็ตาม Display
API จะมีขอบเขตของแอปเสมอ
วิธีที่แอปจะได้รับผลลัพธ์เดียวกันกับการลบล้าง
ประกาศกิจกรรมที่ปรับขนาดไม่ได้โดยการตั้งค่าแอตทริบิวต์ android:resizeableActivity
เป็น false
หรือแฟล็กข้อมูลเมตา 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>
หมายเหตุ: คำสั่งจะใช้หรือนำการลบล้างออกชั่วคราวเท่านั้น
แหล่งข้อมูลเพิ่มเติม
- หลักเกณฑ์คุณภาพของแอปบนหน้าจอขนาดใหญ่
- หลักเกณฑ์คุณภาพแอปหลัก