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 ที่เลิกใช้งานจะยังคงใช้งานได้เพื่อการทำงานร่วมกันแบบย้อนหลัง
View
API บางรายการออกแบบมาเพื่อวัตถุประสงค์พิเศษที่นักพัฒนาซอฟต์แวร์อาจไม่เข้าใจเสมอไป
ปัญหา
นักพัฒนาแอปยังคงใช้ Display
API ที่เลิกใช้งานและเข้าใจผิดว่า API จะแสดงผลขอบเขตของแอปแทนขอบเขตพื้นที่แสดงผลของอุปกรณ์ หรือนักพัฒนาแอปใช้ View API สําหรับวัตถุประสงค์พิเศษเพื่อรับเมตริกการแสดงผลทั่วไปโดยไม่ได้ตั้งใจ
ผลลัพธ์ที่ได้คือการคำนวณที่ไม่ถูกต้องเมื่อจัดตำแหน่งองค์ประกอบ UI ใหม่หลังจากเหตุการณ์การปรับขนาดหน้าต่างแอป ซึ่งทำให้เกิดปัญหาการจัดวาง
Display API ที่เลิกใช้งานแล้วและมักใช้ในทางที่ผิด
ดูข้อมูลเพิ่มเติมได้ที่รองรับโหมดหลายหน้าต่าง
การใช้ View API ในทางที่ผิด:
การเพิ่มประสิทธิภาพ
อย่าใช้ขนาดการแสดงผลจริงในการวางตำแหน่งองค์ประกอบ UI ย้ายข้อมูลแอปไปยัง API ตาม WindowMetrics
ซึ่งรวมถึงWindowManager
API ต่อไปนี้
แพลตฟอร์ม:
Jetpack
วิธีแก้ปัญหาความเข้ากันได้
การลบล้าง 2 รายการจะปรับ Display
API ที่เลิกใช้งานและ View
API ที่ใช้ในทางที่ผิดเพื่อแสดงขอบเขตของแอป ดังนี้
ALWAYS_SANDBOX_DISPLAY_APIS
สำหรับ Display
API และ OVERRIDE_SANDBOX_VIEW_BOUNDS_APIS
สำหรับ View
API ระบบจะใช้ ALWAYS_SANDBOX_DISPLAY_APIS
กับแอปที่มีสิทธิ์ใช้โหมดการใช้งานร่วมกับขนาดได้โดยค่าเริ่มต้นด้วย
กิจกรรมที่โปร่งใส
กิจกรรมที่โปร่งใสเป็นผลมาจากสไตล์พื้นหลังโปร่งใส เช่น
<style name="Transparent" parent="AppTheme">
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowBackground">@android:color/transparent</item>
</style>
ธีมที่เกี่ยวข้องกับกล่องโต้ตอบ เช่น Theme.MaterialComponents.Dialog
สามารถรวมสไตล์ที่ทำให้กิจกรรมมีความโปร่งใส
กิจกรรมแบบโปร่งใสไม่ครอบคลุมพื้นที่แสดงผลที่มีอยู่ทั้งหมด ซึ่งทำให้จัดการได้ยากเนื่องจากพื้นที่แสดงผลที่มีอยู่อาจเปลี่ยนแปลงตามการเปลี่ยนแปลงการกำหนดค่า เช่น การหมุนอุปกรณ์ การพับและการกางอุปกรณ์ และโหมดหลายหน้าต่าง
ปัญหา
กิจกรรมที่โปร่งใสควรเป็นไปตามขอบเขตของกิจกรรมทึบแสงแรกซึ่งอยู่ใต้กิจกรรมที่โปร่งใสในกองกิจกรรมของงาน อย่างไรก็ตาม กิจกรรมทึบแสงที่เปิดกล่องโต้ตอบสิทธิ์อาจเป็นกิจกรรม Trampoline (กิจกรรมที่เปิดกิจกรรมอื่นแล้วหายไป) ระบบจึงไม่สามารถระบุขอบเขตของกิจกรรม Trampoline ที่เปิดกิจกรรมกล่องโต้ตอบสิทธิ์แบบโปร่งใส
การเพิ่มประสิทธิภาพ
กิจกรรมแบบโปร่งใสจะรับข้อจำกัดมาจากกิจกรรมแบบทึบแสงที่อยู่ด้านบนสุดในกองงาน กิจกรรมแบบทึบแสงต้องพร้อมใช้งานตลอดวงจรชีวิตของกิจกรรมแบบโปร่งใส ตั้งแต่การสร้างกิจกรรมไปจนถึงการทำลาย ด้วยเหตุนี้ อย่าเริ่มคำขอสิทธิ์จากกิจกรรม Trampoline
หากกิจกรรม Trampoline เปิดคําขอสิทธิ์ ผู้ใช้อาจไม่เห็นกล่องโต้ตอบสิทธิ์ เนื่องจากระบบจะทำลายกิจกรรม Trampoline ก่อนที่ผู้ใช้จะมีโอกาสตอบกลับกล่องโต้ตอบ และระบบอาจคํานวณขนาดและตําแหน่งกิจกรรมกล่องโต้ตอบไม่ถูกต้อง
แอปควรเปิดคําขอสิทธิ์จากกิจกรรมที่ยังคงมองเห็นได้เสมอจนกว่าผู้ใช้จะตัดสินใจว่าจะให้สิทธิ์หรือไม่
มุมมน
กิจกรรมอาจโปร่งใสเนื่องจากมีสไตล์ที่ระบุความโปร่งใสของพื้นหลัง หรือเนื่องจากเนื้อหาของกิจกรรมไม่เต็มพื้นที่แสดงผลที่มีอยู่ หากกิจกรรมแบบโปร่งใสเต็มพื้นที่แสดงผลที่มีอยู่ ระบบจะใช้มุมมนกับกิจกรรมโดยอัตโนมัติเมื่อผู้ผลิตอุปกรณ์กําหนดค่าให้ทําเช่นนั้น แต่หากกิจกรรมแบบโปร่งใส (เช่น กล่องโต้ตอบสิทธิ์) ไม่ได้เต็มพื้นที่ว่าง คุณก็เลือกได้ว่าจะใส่มุมมนหรือไม่
กล่องโต้ตอบสิทธิ์จะไม่แสดงเต็มพื้นที่ที่แสดงได้ เนื่องจากโดยปกติแล้วเลย์เอาต์กล่องโต้ตอบจะใช้ LayoutParams.WRAP_CONTENT แทน LayoutParams.MATCH_PARENT
วิธีแก้ปัญหาความเข้ากันได้
แสดงกิจกรรมที่เปิดกิจกรรมกล่องโต้ตอบจนกว่าผู้ใช้จะตอบกลับกล่องโต้ตอบ
ระบบจะตรวจสอบว่ากิจกรรมแบบโปร่งใสรับข้อจำกัดทั้งหมดมาจากกิจกรรมแบบทึบแสงแรกที่อยู่ใต้กิจกรรมแบบโปร่งใสในกองกิจกรรม รวมถึงข้อจำกัดที่เกี่ยวข้องกับสิ่งต่อไปนี้
- โหมดความเข้ากันได้ของขนาด
- การวางแนว
- สัดส่วนภาพ
เกม Unity
เกม Unity ทำงานบน Android แบบเต็มหน้าจอหรือในโหมดหลายหน้าต่าง อย่างไรก็ตาม เกม Unity จำนวนมากจะเสียโฟกัสและหยุดวาดเนื้อหาเมื่อแอปอยู่ในโหมดหลายหน้าต่าง
ปัญหา
Unity เพิ่มตัวเลือก Resizable Window
ใน Unity 2019.4 เพื่อรองรับโหมดหลายหน้าต่างใน Android อย่างไรก็ตาม การใช้งานครั้งแรกไม่ตอบสนองต่อวงจรชีวิตของกิจกรรมในโหมดหลายหน้าต่างอย่างถูกต้อง ทําให้ UnityPlayer หยุดเล่นชั่วคราวเมื่อแอปเสียโฟกัส โปรแกรมเล่นแสดงผลเป็นหน้าจอสีดําหรือเฟรมสุดท้ายที่ค้างอยู่ของเกม เกมเพลย์จะกลับมาทำงานต่อก็ต่อเมื่อผู้ใช้แตะหน้าจอเท่านั้น แอปจำนวนมากที่ใช้เอนจิน Unity พบปัญหานี้และแสดงผลเป็นหน้าต่างสีดําในโหมดหลายหน้าต่าง
การเพิ่มประสิทธิภาพ
อัปเกรด Unity เป็น 2019.4.40 ขึ้นไปและส่งออกเกมอีกครั้ง เลือกตัวเลือก Resizable Window
ไว้ในการตั้งค่าโปรแกรมเล่น Android เสมอ ไม่เช่นนั้นเกมจะหยุดชั่วคราวเมื่อไม่ได้อยู่ในโฟกัส แม้ว่าเกมจะมองเห็นได้ทั้งหมดในโหมดหลายหน้าต่างก็ตาม
วิธีแก้ปัญหาความเข้ากันได้
ผู้ผลิตอุปกรณ์สามารถใช้การลบล้างOVERRIDE_ENABLE_COMPAT_FAKE_FOCUS
ต่อการลบล้างระดับแอปเพื่อให้เหตุการณ์โฟกัสปลอมแก่แอปในโหมดหลายหน้าต่าง การลบล้างช่วยให้กิจกรรมวาดเนื้อหาใหม่ได้และจะไม่ถูกปิดบัง
ทดสอบแอปเพื่อหาปัญหาความเข้ากันได้
หากต้องการทดสอบแอปและทำความเข้าใจลักษณะการทํางานของแอปในอุปกรณ์รูปแบบต่างๆ ให้ใช้ประโยชน์จากแหล่งข้อมูลต่อไปนี้
- การสตรีมอุปกรณ์: หากต้องการทดสอบแอปในอุปกรณ์เวอร์ชันที่ใช้งานจริง (รวมถึงอุปกรณ์อ้างอิง) ที่โฮสต์ในศูนย์ข้อมูลของ 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 | ป้องกันไม่ให้ภาพแสดงผลแบบ Letterboxing โดยปิดใช้การตั้งค่า "ละเว้นคำขอการวางแนว" ของผู้ผลิตอุปกรณ์ | |
Sandbox API | NEVER_SANDBOX_DISPLAY_APIS | 184838306 | ป้องกันไม่ให้มีการเปลี่ยนแปลงลักษณะการทํางานของ Display API |
ALWAYS_SANDBOX_DISPLAY_APIS | 185004937 | บังคับให้ Display API ในแอปแสดงผลขอบเขตของแอป Display API จะแสดงขอบเขตพื้นที่แสดงผลเชิงตรรกะ แต่บางครั้งแอปจะถือว่า Display API แสดงขอบเขตแอป ซึ่งทำให้เกิดปัญหาเกี่ยวกับ UI |
|
OVERRIDE_SANDBOX_VIEW_BOUNDS_APIS | 237531167 | บังคับให้ View API ที่ใช้ในแอปแสดงผลขอบเขตของแอป View API จะแสดงขอบเขตพื้นที่แสดงผลเชิงตรรกะ แต่บางครั้งแอปจะถือว่า View API แสดงขอบเขตแอป ซึ่งทำให้เกิดปัญหาเกี่ยวกับ UI |
|
ความเข้ากันได้ของกล้อง | OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION | 263959004 | ปิดการบังคับให้หมุน โดยค่าเริ่มต้น ระบบจะบังคับให้แอปกล้องที่มีการวางแนวแบบคงที่ทั้งหมดหมุนเมื่อเปิดตัวอย่างกล้อง |
OVERRIDE_CAMERA_COMPAT_DISABLE_REFRESH | 264304459 | นำการรีเฟรชแบบบังคับเริ่มต้นออกเมื่อมีการบังคับหมุนการแสดงตัวอย่างกล้อง | |
OVERRIDE_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE | 264301586 | เปลี่ยนการรีเฟรชแบบฮาร์ดเป็นการรีเฟรชแบบซอฟต์เมื่อมีการบังคับหมุนตัวอย่างจากกล้อง ซึ่งจะช่วยรักษาสถานะระหว่างการบังคับหมุน โดยค่าเริ่มต้น Android จะใช้การรีเฟรชแบบบังคับเมื่อมีการบังคับหมุนตัวอย่างจากกล้อง การรีเฟรชอย่างหนักอาจทําให้แอปสูญเสียสถานะหรือหน้าจอเป็นสีดํา ทั้งนี้ขึ้นอยู่กับวิธีที่แอปแคชสถานะก่อนหน้า | |
OVERRIDE_CAMERA_LANDSCAPE_TO_PORTRAIT | 250678880 | ครอบตัดบัฟเฟอร์รูปภาพของกล้องหน้าด้านใน หากปิดใช้การลบล้าง ระบบจะนำการครอบตัดของกล้องหน้าด้านในออกและเพิ่มมุมมองของตัวอย่างภาพจากกล้อง โดยค่าเริ่มต้นในอุปกรณ์แบบพับได้บางรุ่น (ดูอุปกรณ์อ้างอิง) ระบบจะครอบตัดตัวอย่างกล้องของแอปกล้องทั้งหมดเมื่อใช้กล้องหน้าด้านใน | |
เบ็ดเตล็ด | OVERRIDE_ENABLE_COMPAT_FAKE_FOCUS | 263259275 | ป้องกันไม่ให้แอปเป็นสีดําเมื่อแอปเสียโฟกัสในโหมดแยกหน้าจอ แอปรอโฟกัสก่อนที่จะวาดเนื้อหาแอป ซึ่งอาจทำให้แอปค้างหรือเป็นสีดํา การลบล้างช่วยให้ Android ส่งเหตุการณ์โฟกัสปลอมไปยังแอปได้ ซึ่งจะเป็นสัญญาณให้แอปเริ่มวาดเนื้อหาอีกครั้ง |
FORCE_RESIZE_APP
บังคับให้แพ็กเกจที่มีการใช้การลบล้างปรับขนาดได้ จะไม่มีผลต่อการกำหนดว่าแอปจะเข้าสู่โหมดหลายหน้าต่างได้หรือไม่ แต่จะช่วยให้แอปปรับขนาดได้โดยไม่ต้องเข้าสู่โหมดความเข้ากันได้กับขนาดเมื่อหน้าจอปรับขนาด
วิธีที่แอปให้ผลลัพธ์เดียวกันกับการลบล้าง
ในไฟล์ Manifest ของแอป ให้ตั้งค่าแอตทริบิวต์ android:resizeableActivity
เป็น true
หรือหากต้องการรองรับการปรับขนาดขณะปิดใช้โหมดหลายหน้าต่างด้วย android:resizeableActivity=false
ให้ตั้งค่า Flag ข้อมูลเมตา android.supports_size_changes
เป็น true
วิธีเพิ่มประสิทธิภาพแอป
ใช้เลย์เอาต์ที่ปรับเปลี่ยนตามอุปกรณ์/ที่ปรับเปลี่ยนได้เพื่อให้แอปปรับขนาดการแสดงผลและอัตราส่วนการแสดงผลทั้งหมดได้ ดูหัวข้อรองรับขนาดการแสดงผลที่แตกต่างกัน
วิธีปิดใช้หรือเลือกไม่ใช้การลบล้าง
ตั้งค่า Flag ของพร็อพเพอร์ตี้ PROPERTY_COMPAT_ALLOW_RESIZEABLE_ACTIVITY_OVERRIDES
เป็น false
การตั้งค่าพร็อพเพอร์ตี้เพื่อปรับการลบล้าง
<property android:name="android.window.PROPERTY_COMPAT_ALLOW_RESIZEABLE_ACTIVITY_OVERRIDES"
android:value="true|false"/>
คำสั่ง adb เพื่อทดสอบการลบล้าง
วิธีใช้การลบล้างและทำให้แอปปรับขนาดได้
adb shell am compat enable FORCE_RESIZE_APP <package>
วิธีนำการลบล้างออก
adb shell am compat disable FORCE_RESIZE_APP <package>
หมายเหตุ: คำสั่งจะใช้หรือนำการลบล้างออกชั่วคราวเท่านั้น
FORCE_NON_RESIZE_APP
บังคับให้แพ็กเกจที่ใช้การลบล้างเป็นแบบปรับขนาดไม่ได้และเข้าสู่โหมดความเข้ากันได้ของขนาดเมื่อมีการเปลี่ยนแปลงการกำหนดค่า
วิธีที่แอปให้ผลลัพธ์เดียวกันกับการลบล้าง
ตั้งค่าทั้งแอตทริบิวต์ android:resizeableActivity
และธงข้อมูลเมตา android.supports_size_changes
เป็น false
ในไฟล์ Manifest ของแอป และประกาศข้อจำกัดการวางแนวหรือสัดส่วนการแสดงผล
วิธีเพิ่มประสิทธิภาพแอป
แอปทั้งหมดที่ทำงานได้ดีหากปรับขนาดควรตั้งค่า android:resizeableActivity
หรือ android.supports_size_changes
เป็น true
แอปอื่นๆ ควรได้รับการปรับปรุงให้ทำงานได้ดีเมื่อปรับขนาด ดูandroid:resizeableActivity
วิธีปิดใช้หรือเลือกไม่ใช้การลบล้าง
ตั้งค่า Flag ของพร็อพเพอร์ตี้ PROPERTY_COMPAT_ALLOW_RESIZEABLE_ACTIVITY_OVERRIDES
เป็น false
การตั้งค่าพร็อพเพอร์ตี้เพื่อปรับการลบล้าง
<property android:name="android.window.PROPERTY_COMPAT_ALLOW_RESIZEABLE_ACTIVITY_OVERRIDES"
android:value="true|false"/>
คำสั่ง adb เพื่อทดสอบการลบล้าง
วิธีใช้การลบล้างและทำให้แอปปรับขนาดไม่ได้
adb shell am compat enable FORCE_NON_RESIZE_APP <package>
วิธีนำการลบล้างออก
adb shell am compat disable FORCE_NON_RESIZE_APP <package>
หมายเหตุ: คำสั่งจะใช้หรือนำการลบล้างออกชั่วคราวเท่านั้น
OVERRIDE_MIN_ASPECT_RATIO
รายการที่ควบคุมการลบล้างทั้งหมดซึ่งบังคับให้ใช้สัดส่วนภาพขั้นต่ำที่กำหนด
วิธีที่แอปให้ผลลัพธ์เดียวกันกับการลบล้าง
ตั้งค่า android:minAspectRatio
ที่ระดับกิจกรรมหรือแอป
วิธีเพิ่มประสิทธิภาพแอป
อย่าตั้งค่าข้อจำกัดสัดส่วนการแสดงผลในแอป ตรวจสอบว่าแอปรองรับการแสดงผลขนาดต่างๆ ใช้คลาสขนาดหน้าต่างเพื่อรองรับเลย์เอาต์ต่างๆ โดยอิงตามพื้นที่ที่แอปมีบนหน้าจอ โปรดดูCompose WindowSizeClass
API และ View
WindowSizeClass
API
วิธีปิดใช้หรือเลือกไม่ใช้การลบล้าง
ระบุข้อจำกัดสัดส่วนภาพหรือตั้งค่า Flag ของพร็อพเพอร์ตี้ PROPERTY_COMPAT_ALLOW_MIN_ASPECT_RATIO_OVERRIDE
เป็น false
การตั้งค่าพร็อพเพอร์ตี้เพื่อปรับการลบล้าง
<property android:name="android.window.PROPERTY_COMPAT_ALLOW_MIN_ASPECT_RATIO_OVERRIDE"
android:value="false"/>
คำสั่ง adb เพื่อทดสอบการลบล้าง
วิธีใช้การลบล้าง
adb shell am compat enable OVERRIDE_MIN_ASPECT_RATIO <package>
วิธีนำการลบล้างออก
adb shell am compat disable OVERRIDE_MIN_ASPECT_RATIO <package>
หมายเหตุ: คำสั่งจะใช้หรือนำการลบล้างออกชั่วคราวเท่านั้น
OVERRIDE_MIN_ASPECT_RATIO_PORTRAIT_ONLY
จำกัดการตั้งค่าแอปที่บังคับใช้อัตราส่วนภาพขั้นต่ำที่กำหนดสำหรับกิจกรรมที่มีการวางแนวเป็นแนวตั้งเท่านั้น เปิดใช้งานโดยค่าเริ่มต้นและจะมีผลก็ต่อเมื่อเปิดใช้ OVERRIDE_MIN_ASPECT_RATIO
ด้วย
วิธีที่แอปให้ผลลัพธ์เดียวกันกับการลบล้าง
วิธีเพิ่มประสิทธิภาพแอป
วิธีปิดใช้หรือเลือกไม่ใช้การลบล้าง
การตั้งค่าพร็อพเพอร์ตี้เพื่อปรับการลบล้าง
คำสั่ง 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)
วิธีที่แอปให้ผลลัพธ์เหมือนกับการลบล้าง
วิธีเพิ่มประสิทธิภาพแอป
วิธีปิดใช้หรือเลือกไม่ใช้การลบล้าง
การตั้งค่าพร็อพเพอร์ตี้เพื่อปรับการลบล้าง
คำสั่ง 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)
วิธีที่แอปให้ผลลัพธ์เดียวกันกับการลบล้าง
วิธีเพิ่มประสิทธิภาพแอป
วิธีปิดใช้หรือเลือกไม่ใช้การลบล้าง
การตั้งค่าพร็อพเพอร์ตี้เพื่อปรับการลบล้าง
คำสั่ง 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
เปิดใช้อัตราส่วนภาพแบบแยกหน้าจอ อนุญาตให้แอปใช้พื้นที่ว่างทั้งหมดในโหมดแยกหน้าจอ เพื่อหลีกเลี่ยงการใส่แถบดำด้านบนและด้านล่าง
วิธีที่แอปให้ผลลัพธ์เดียวกันกับการลบล้าง
วิธีเพิ่มประสิทธิภาพแอป
วิธีปิดใช้หรือเลือกไม่ใช้การลบล้าง
การตั้งค่าพร็อพเพอร์ตี้เพื่อปรับการลบล้าง
คำสั่ง 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_ANY_ORIENTATION
เปิดใช้การลบล้างต่อไปนี้เพื่อลบล้างการวางแนว
- 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_ANY_ORIENTATION_TO_USER
ช่วยให้แอปแสดงเต็มพื้นที่ที่แสดงได้ ลบล้างข้อจำกัดเกี่ยวกับการวางแนว ความสามารถในการปรับขนาด และสัดส่วนภาพที่ระบุไว้ในไฟล์ Manifest ของแอป และยังไม่สนใจการเรียกใช้ Activity#setRequestedOrientation()
ด้วย
วิธีที่แอปให้ผลลัพธ์เดียวกันกับการลบล้าง
อย่าตั้งค่าแอตทริบิวต์ไฟล์ Manifest
android:screenOrientation
หรือตั้งค่าแอตทริบิวต์เป็น"user"
ตั้งค่าแอตทริบิวต์ไฟล์ Manifest
android:resizeableActivity
เป็นtrue
ในหน้าจอขนาดเล็ก หากต้องการรองรับการปรับขนาดแอปขณะปิดใช้โหมดหลายหน้าต่างด้วย
android:resizeableActivity=false
ให้ตั้งค่า Flag ข้อมูลเมตาandroid.supports_size_changes
เป็นtrue
อย่าตั้งค่าminAspectRatio
และmaxAspectRatio
วิธีเพิ่มประสิทธิภาพแอป
เปิดใช้แอปให้รองรับการวางแนวทั้งหมด อย่ากำหนดscreenOrientation
ข้อกำหนดในไฟล์ Manifest ของแอป รองรับการปรับขนาดแอป โหมดหลายหน้าต่าง และอัตราส่วนการแสดงผลทั้งหมดโดยตั้งค่าแอตทริบิวต์ android:resizeableActivity
ในไฟล์ Manifest ของแอปเป็น true
ดูหัวข้อรองรับขนาดการแสดงผลที่แตกต่างกัน
วิธีปิดใช้หรือเลือกไม่ใช้การลบล้าง
โปรดดู OVERRIDE_ANY_ORIENTATION
การตั้งค่าพร็อพเพอร์ตี้เพื่อปรับการลบล้าง
โปรดดู OVERRIDE_ANY_ORIENTATION
คำสั่ง adb เพื่อทดสอบการลบล้าง
วิธีใช้การลบล้าง
adb shell am compat enable OVERRIDE_ANY_ORIENTATION_TO_USER <package>
วิธีนำการลบล้างออก
adb shell am compat disable OVERRIDE_ANY_ORIENTATION_TO_USER <package>
หมายเหตุ: คำสั่งจะใช้หรือนำการลบล้างออกชั่วคราวเท่านั้น
OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT
เปิดใช้การวางแนวตั้งสำหรับกิจกรรมทั้งหมดในแพ็กเกจ ระบบจะใช้การลบล้างก็ต่อเมื่อกิจกรรมไม่ได้ระบุการวางแนวแบบคงที่อื่นๆ ไว้ เว้นแต่ว่าจะมีการเปิดใช้ OVERRIDE_ANY_ORIENTATION
วิธีที่แอปให้ผลลัพธ์เดียวกันกับการลบล้าง
โปรดดู OVERRIDE_ANY_ORIENTATION
วิธีเพิ่มประสิทธิภาพแอป
โปรดดู OVERRIDE_ANY_ORIENTATION
วิธีปิดใช้หรือเลือกไม่ใช้การลบล้าง
โปรดดู OVERRIDE_ANY_ORIENTATION
การตั้งค่าพร็อพเพอร์ตี้เพื่อปรับการลบล้าง
โปรดดู OVERRIDE_ANY_ORIENTATION
คำสั่ง adb เพื่อทดสอบการลบล้าง
วิธีใช้การลบล้าง
adb shell am compat enable OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT <package>
วิธีนำการลบล้างออก
adb shell am compat disable OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT <package>
หมายเหตุ: คำสั่งจะใช้หรือนำการลบล้างออกชั่วคราวเท่านั้น
OVERRIDE_UNDEFINED_ORIENTATION_TO_NOSENSOR
เปิดใช้การวางแนว nosensor สําหรับกิจกรรมทั้งหมดในแพ็กเกจ เว้นแต่จะมีการเปิดใช้ OVERRIDE_ANY_ORIENTATION ระบบจะใช้การลบล้างเฉพาะในกรณีที่กิจกรรมไม่ได้ระบุการวางแนวแบบคงที่อื่นๆ
วิธีที่แอปให้ผลลัพธ์เดียวกันกับการลบล้าง
โปรดดู OVERRIDE_ANY_ORIENTATION
วิธีเพิ่มประสิทธิภาพแอป
โปรดดู OVERRIDE_ANY_ORIENTATION
วิธีปิดใช้หรือเลือกไม่ใช้การลบล้าง
โปรดดู OVERRIDE_ANY_ORIENTATION
การตั้งค่าพร็อพเพอร์ตี้เพื่อปรับการลบล้าง
โปรดดู OVERRIDE_ANY_ORIENTATION
คำสั่ง adb เพื่อทดสอบการลบล้าง
วิธีใช้การลบล้าง
adb shell am compat enable OVERRIDE_UNDEFINED_ORIENTATION_TO_NOSENSOR <package>
วิธีนำการลบล้างออก
adb shell am compat disable OVERRIDE_UNDEFINED_ORIENTATION_TO_NOSENSOR <package>
หมายเหตุ: คำสั่งจะใช้หรือนำการลบล้างออกชั่วคราวเท่านั้น
OVERRIDE_LANDSCAPE_ORIENTATION_TO_REVERSE_LANDSCAPE
เปิดใช้การวางแนวแนวตั้งกลับสำหรับกิจกรรมทั้งหมดในแพ็กเกจ เว้นแต่จะมีการเปิดใช้ OVERRIDE_ANY_ORIENTATION ระบบจะใช้การลบล้างเฉพาะในกรณีที่กิจกรรมไม่ได้ระบุการวางแนวแบบคงที่อื่นๆ
วิธีที่แอปให้ผลลัพธ์เดียวกันกับการลบล้าง
โปรดดู OVERRIDE_ANY_ORIENTATION
วิธีเพิ่มประสิทธิภาพแอป
โปรดดู OVERRIDE_ANY_ORIENTATION
วิธีปิดใช้หรือเลือกไม่ใช้การลบล้าง
โปรดดู OVERRIDE_ANY_ORIENTATION
การตั้งค่าพร็อพเพอร์ตี้เพื่อปรับการลบล้าง
โปรดดู OVERRIDE_ANY_ORIENTATION
คำสั่ง adb เพื่อทดสอบการลบล้าง
วิธีใช้การลบล้าง
adb shell am compat enable OVERRIDE_LANDSCAPE_ORIENTATION_TO_REVERSE_LANDSCAPE <package>
วิธีนำการลบล้างออก
adb shell am compat disable OVERRIDE_LANDSCAPE_ORIENTATION_TO_REVERSE_LANDSCAPE <package>
หมายเหตุ: คำสั่งจะใช้หรือนำการลบล้างออกชั่วคราวเท่านั้น
OVERRIDE_ORIENTATION_ONLY_FOR_CAMERA
การจำกัด OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT, OVERRIDE_UNDEFINED_ORIENTATION_TO_NOSENSOR, และ OVERRIDE_LANDSCAPE_ORIENTATION_TO_REVERSE_LANDSCAPE จะใช้งานได้เฉพาะเมื่อการเชื่อมต่อกล้องทำงานอยู่เท่านั้น
วิธีที่แอปให้ผลลัพธ์เดียวกันกับการลบล้าง
โปรดดู OVERRIDE_ANY_ORIENTATION
วิธีเพิ่มประสิทธิภาพแอป
โปรดดู OVERRIDE_ANY_ORIENTATION
วิธีปิดใช้หรือเลือกไม่ใช้การลบล้าง
โปรดดู OVERRIDE_ANY_ORIENTATION
การตั้งค่าพร็อพเพอร์ตี้เพื่อปรับการลบล้าง
โปรดดู OVERRIDE_ANY_ORIENTATION
คำสั่ง adb เพื่อทดสอบการลบล้าง
วิธีใช้การลบล้าง
adb shell am compat enable OVERRIDE_ORIENTATION_ONLY_FOR_CAMERA <package>
วิธีนำการลบล้างออก
adb shell am compat disable OVERRIDE_ORIENTATION_ONLY_FOR_CAMERA <package>
หมายเหตุ: คำสั่งจะใช้หรือนำการลบล้างออกชั่วคราวเท่านั้น
OVERRIDE_USE_DISPLAY_LANDSCAPE_NATURAL_ORIENTATION
จำกัดการวางแนวจอแสดงผลเป็นแนวนอนตามธรรมชาติเมื่อเป็นไปตามเงื่อนไขต่อไปนี้
- กิจกรรมเป็นแบบเต็มหน้าจอ
- ไม่ได้เปิดใช้พร็อพเพอร์ตี้คอมโพเนนต์การเลือกไม่ใช้
PROPERTY_COMPAT_ALLOW_DISPLAY_ORIENTATION_OVERRIDE
- การตั้งค่า "ผู้ผลิตอุปกรณ์ละเว้นคําขอการวางแนว" เปิดใช้สําหรับจอแสดงผล
- การวางแนวธรรมชาติของจอแสดงผลคือแนวนอน
วิธีที่แอปให้ผลลัพธ์เดียวกันกับการลบล้าง
ไม่สามารถใช้งาน ปัญหานี้ควรได้รับการแก้ไขในตรรกะแอปพลิเคชัน
วิธีเพิ่มประสิทธิภาพแอป
โปรดดู OVERRIDE_ANY_ORIENTATION
วิธีปิดใช้หรือเลือกไม่ใช้การลบล้าง
ตั้งค่า Flag ของพร็อพเพอร์ตี้ PROPERTY_COMPAT_ALLOW_DISPLAY_ORIENTATION_OVERRIDE
เป็น false
การตั้งค่าพร็อพเพอร์ตี้เพื่อปรับการลบล้าง
<property android:name="android.window.PROPERTY_COMPAT_ALLOW_DISPLAY_ORIENTATION_OVERRIDE"
android:value="true|false"/>
คำสั่ง adb เพื่อทดสอบการลบล้าง
วิธีใช้การลบล้าง
adb shell am compat enable OVERRIDE_USE_DISPLAY_LANDSCAPE_NATURAL_ORIENTATION <package>
วิธีนำการลบล้างออก
adb shell am compat disable OVERRIDE_USE_DISPLAY_LANDSCAPE_NATURAL_ORIENTATION <package>
หมายเหตุ: คำสั่งจะใช้หรือนำการลบล้างออกชั่วคราวเท่านั้น
OVERRIDE_ENABLE_COMPAT_IGNORE_REQUESTED_ORIENTATION
เปิดใช้นโยบายความเข้ากันได้ที่จะข้ามการอัปเดตการวางแนวของแอปเพื่อตอบสนองต่อการเรียกใช้ Activity#setRequestedOrientation()
ของแอปเมื่อแอปเปิดขึ้นมาใหม่หรือมีการจัดการความเข้ากันได้ของกล้องที่ใช้งานอยู่
วิธีที่แอปให้ผลลัพธ์เดียวกันกับการลบล้าง
ตั้งค่าสถานะพร็อพเพอร์ตี้ PROPERTY_COMPAT_IGNORE_REQUESTED_ORIENTATION
เป็น true
วิธีเพิ่มประสิทธิภาพแอป
โปรดดู OVERRIDE_ANY_ORIENTATION
วิธีปิดใช้หรือเลือกไม่ใช้การลบล้าง
ตั้งค่าสถานะพร็อพเพอร์ตี้ PROPERTY_COMPAT_IGNORE_REQUESTED_ORIENTATION
เป็น false
การตั้งค่าพร็อพเพอร์ตี้เพื่อปรับการลบล้าง
<property android:name="android.window.PROPERTY_COMPAT_IGNORE_REQUESTED_ORIENTATION"
android:value="true|false"/>
คำสั่ง adb เพื่อทดสอบการลบล้าง
วิธีใช้การลบล้าง
adb shell am compat enable OVERRIDE_ENABLE_COMPAT_IGNORE_REQUESTED_ORIENTATION <package>
วิธีนำการลบล้างออก
adb shell am compat disable OVERRIDE_ENABLE_COMPAT_IGNORE_REQUESTED_ORIENTATION <package>
หมายเหตุ: คำสั่งจะใช้หรือนำการลบล้างออกชั่วคราวเท่านั้น
OVERRIDE_ENABLE_COMPAT_IGNORE_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED
เปิดใช้นโยบายความเข้ากันได้ที่ไม่สนใจการวางแนวที่แอปขอเพื่อตอบสนองต่อการเรียกแอป Activity#setRequestedOrientation()
มากกว่า 2 ครั้งใน 1 วินาที หากกิจกรรมไม่ได้ใส่แถบดำด้านบนและด้านล่างสำหรับการวางแนวแบบคงที่
วิธีที่แอปให้ผลลัพธ์เดียวกันกับการลบล้าง
ไม่สามารถใช้งาน ปัญหานี้ควรได้รับการแก้ไขในตรรกะแอปพลิเคชัน
วิธีเพิ่มประสิทธิภาพแอป
โปรดดู OVERRIDE_ANY_ORIENTATION
วิธีปิดใช้หรือเลือกไม่ใช้การลบล้าง
ตั้งค่าสถานะพร็อพเพอร์ตี้ PROPERTY_COMPAT_ALLOW_IGNORING_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED
เป็น false
การตั้งค่าพร็อพเพอร์ตี้เพื่อปรับการลบล้าง
<property android:name="android.window.PROPERTY_COMPAT_ALLOW_IGNORING_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED"
android:value="false"/>
คำสั่ง adb เพื่อทดสอบการลบล้าง
วิธีใช้การลบล้าง
adb shell am compat enable OVERRIDE_ENABLE_COMPAT_IGNORE_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED <package>
วิธีนำการลบล้างออก
adb shell am compat disable OVERRIDE_ENABLE_COMPAT_IGNORE_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED <package>
หมายเหตุ: คำสั่งจะใช้หรือนำการลบล้างออกชั่วคราวเท่านั้น
OVERRIDE_RESPECT_REQUESTED_ORIENTATION
ยกเว้นแพ็กเกจจากลักษณะการทํางานของคําขอการวางแนวที่ผู้ผลิตอุปกรณ์เปิดใช้ได้สําหรับพื้นที่แสดงผลหรือทั้งหน้าจอ
วิธีที่แอปให้ผลลัพธ์เดียวกันกับการลบล้าง
ไม่สามารถใช้งาน ปัญหานี้ควรได้รับการแก้ไขในตรรกะแอปพลิเคชัน
วิธีเพิ่มประสิทธิภาพแอป
โปรดดู OVERRIDE_ANY_ORIENTATION
วิธีปิดใช้หรือเลือกไม่ใช้การลบล้าง
เลือกไม่ใช้ไม่ได้ การปิดใช้การลบล้างอาจเป็นอันตรายได้หากแอปเข้ากันไม่ได้กับอุปกรณ์ที่เปิดใช้การตั้งค่าผู้ผลิตอุปกรณ์ละเว้นคำขอการวางแนว โปรดติดต่อทีมพัฒนาแอป Android เพื่อปิดใช้การลบล้าง
การตั้งค่าพร็อพเพอร์ตี้เพื่อปรับการลบล้าง
ไม่มี Flag พร็อพเพอร์ตี้สำหรับการลบล้างนี้
คำสั่ง adb เพื่อทดสอบการลบล้าง
วิธีใช้การลบล้าง
adb shell am compat enable OVERRIDE_RESPECT_REQUESTED_ORIENTATION <package>
วิธีนำการลบล้างออก
adb shell am compat disable OVERRIDE_RESPECT_REQUESTED_ORIENTATION <package>
หมายเหตุ: คำสั่งจะใช้หรือนำการลบล้างออกชั่วคราวเท่านั้น
NEVER_SANDBOX_DISPLAY_APIS
บังคับให้แพ็กเกจไม่มีการใช้แซนด์บ็อกซ์ Display
API สำหรับการดําเนินการในโหมดความเข้ากันได้กับขนาดหรือโหมด Letterbox Display
API จะยังคงระบุขอบเขตพื้นที่โฆษณา
วิธีที่แอปให้ผลลัพธ์เดียวกันกับการลบล้าง
ประกาศว่ากิจกรรมปรับขนาดได้โดยการกําหนดแอตทริบิวต์ไฟล์ Manifest android:resizeableActivity
เป็น true
หรือตั้งค่า Flag ข้อมูลเมตา android.supports_size_changes
เป็น true
วิธีเพิ่มประสิทธิภาพแอป
แอปที่ประกาศว่าปรับขนาดได้อย่างเต็มที่ไม่ควรใช้ขนาดการแสดงผลเพื่อจัดตำแหน่งองค์ประกอบ UI ย้ายข้อมูลแอปไปยัง API เวอร์ชันล่าสุดที่ให้บริการ WindowMetrics
หากใช้ Jetpack Compose ให้ใช้ประโยชน์จาก WindowSizeClass
API เพื่อวาด UI โดยอิงตามพื้นที่หน้าจอที่แอปมีในการแสดงผลปัจจุบัน ดูหัวข้อใช้คลาสขนาดหน้าต่าง
วิธีปิดใช้หรือเลือกไม่ใช้การลบล้าง
เลือกไม่ใช้ไม่ได้ ย้ายข้อมูลจาก API ที่เลิกใช้งานแล้ว
การตั้งค่าพร็อพเพอร์ตี้เพื่อปรับการลบล้าง
ไม่มี Flag พร็อพเพอร์ตี้สำหรับการลบล้างนี้
คำสั่ง adb เพื่อทดสอบการลบล้าง
วิธีใช้การลบล้าง
adb shell am compat enable NEVER_SANDBOX_DISPLAY_APIS <package>
วิธีนำการลบล้างออก
adb shell am compat disable NEVER_SANDBOX_DISPLAY_APIS <package>
หมายเหตุ: คำสั่งจะใช้หรือนำการลบล้างออกชั่วคราวเท่านั้น
ALWAYS_SANDBOX_DISPLAY_APIS
บังคับให้แพ็กเกจใช้แซนด์บ็อกซ์ Display
API เสมอไม่ว่าจะใช้โหมดกรอบเวลาใดก็ตาม API ของ Display
จะระบุขอบเขตของแอปเสมอ
วิธีที่แอปให้ผลลัพธ์เดียวกันกับการลบล้าง
ประกาศว่ากิจกรรมไม่สามารถปรับขนาดได้โดยการตั้งค่าแอตทริบิวต์ android:resizeableActivity
เป็น false
หรือตั้งค่า Flag ข้อมูลเมตา android.supports_size_changes
เป็น false
วิธีเพิ่มประสิทธิภาพแอป
แอปที่ประกาศว่าปรับขนาดได้อย่างเต็มที่ไม่ควรใช้ขนาดการแสดงผลเพื่อจัดตำแหน่งองค์ประกอบ UI ย้ายข้อมูลแอปจาก API ที่เลิกใช้งานแล้วไปใช้ API เวอร์ชันล่าสุดที่มี WindowMetrics
ดูWindowMetricsCalculator
วิธีปิดใช้หรือเลือกไม่ใช้การลบล้าง
เลือกไม่ใช้ไม่ได้ ย้ายข้อมูลจาก API ที่เลิกใช้งานแล้ว
การตั้งค่าพร็อพเพอร์ตี้เพื่อปรับการลบล้าง
ไม่มี Flag พร็อพเพอร์ตี้สำหรับการลบล้างนี้
คำสั่ง adb เพื่อทดสอบการลบล้าง
วิธีใช้การลบล้าง
adb shell am compat enable ALWAYS_SANDBOX_DISPLAY_APIS <package>
วิธีนำการลบล้างออก
adb shell am compat disable ALWAYS_SANDBOX_DISPLAY_APIS <package>
หมายเหตุ: คำสั่งจะใช้หรือนำการลบล้างออกชั่วคราวเท่านั้น
OVERRIDE_SANDBOX_VIEW_BOUNDS_APIS
บังคับให้แพ็กเกจใช้แซนด์บ็อกซ์กับ API View
ต่อไปนี้ในขอบเขตของกิจกรรม
วิธีที่แอปให้ผลลัพธ์เดียวกันกับการลบล้าง
แก้ไขปัญหานี้ในโค้ดแอปพลิเคชันโดยใช้ API ที่ให้ขอบเขตของหน้าต่างแอปและการเลื่อนที่สัมพันธ์กับหน้าต่างแอปแทนขอบเขตของการแสดงผลของอุปกรณ์และการเลื่อนที่สัมพันธ์กับการแสดงผลของอุปกรณ์
วิธีเพิ่มประสิทธิภาพแอป
แอปควรใช้ View
API โดยคำนึงถึงโอกาสที่จะมีการใช้โหมดหลายหน้าต่างและแถบดำด้านบนและด้านล่างในแอป ดูWindowMetricsCalculator
วิธีปิดใช้หรือเลือกไม่ใช้การลบล้าง
ตั้งค่าสถานะพร็อพเพอร์ตี้ PROPERTY_COMPAT_ALLOW_SANDBOXING_VIEW_BOUNDS_APIS
เป็น false
การตั้งค่าพร็อพเพอร์ตี้เพื่อปรับการลบล้าง
<property android:name="android.window.PROPERTY_COMPAT_ALLOW_SANDBOXING_VIEW_BOUNDS_APIS"
android:value="false"/>
คำสั่ง adb เพื่อทดสอบการลบล้าง
วิธีใช้การลบล้าง
adb shell am compat enable OVERRIDE_SANDBOX_VIEW_BOUNDS_APIS <package>
วิธีนำการลบล้างออก
adb shell am compat disable OVERRIDE_SANDBOX_VIEW_BOUNDS_APIS <package>
หมายเหตุ: คำสั่งจะใช้หรือนำการลบล้างออกชั่วคราวเท่านั้น
OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION
ปิดใช้การหมุนแบบบังคับ ปรับปรุงประสบการณ์ของผู้ใช้ในแอปบางแอป
วิธีที่แอปให้ผลลัพธ์เดียวกันกับการลบล้าง
ตั้งค่าสถานะพร็อพเพอร์ตี้ PROPERTY_CAMERA_COMPAT_ALLOW_FORCE_ROTATION
เป็น false
วิธีเพิ่มประสิทธิภาพแอป
อย่าใช้การวางแนวเซ็นเซอร์กล้องหรือข้อมูลอุปกรณ์ที่แคชไว้ ดูคำแนะนำเกี่ยวกับความเข้ากันได้ของกล้องได้ที่ขอแนะนำช่องมองภาพของกล้องและรองรับพื้นผิวที่ปรับขนาดได้ในแอปกล้อง
วิธีปิดใช้หรือเลือกไม่ใช้การลบล้าง
ตั้งค่าสถานะพร็อพเพอร์ตี้ PROPERTY_CAMERA_COMPAT_ALLOW_FORCE_ROTATION
เป็น true
การตั้งค่าพร็อพเพอร์ตี้เพื่อปรับการลบล้าง
<property android:name="android.window.PROPERTY_CAMERA_COMPAT_ALLOW_FORCE_ROTATION"
android:value="true|false"/>
คำสั่ง adb เพื่อทดสอบการลบล้าง
วิธีใช้การลบล้าง ซึ่งจะนำการหมุนแบบบังคับออก
adb shell am compat enable OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION <package>
วิธีนําการลบล้างออก ซึ่งจะทําให้เกิดการบังคับหมุน
adb shell am compat disable OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION <package>
หมายเหตุ: คำสั่งจะใช้หรือนำการลบล้างออกชั่วคราวเท่านั้น
OVERRIDE_CAMERA_COMPAT_DISABLE_REFRESH
ปิดใช้การรีเฟรชกิจกรรมหลังจากบังคับให้หมุน ปรับปรุงประสบการณ์ของผู้ใช้เมื่อการรีเฟรชทำให้แอปสูญเสียสถานะ
วิธีที่แอปให้ผลลัพธ์เดียวกันกับการลบล้าง
ตั้งค่าสถานะพร็อพเพอร์ตี้ PROPERTY_CAMERA_COMPAT_ALLOW_REFRESH
เป็น false
วิธีเพิ่มประสิทธิภาพแอป
ดู OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION
วิธีปิดใช้หรือเลือกไม่ใช้การลบล้าง
ตั้งค่าสถานะพร็อพเพอร์ตี้ PROPERTY_CAMERA_COMPAT_ALLOW_REFRESH
เป็น true
การตั้งค่าพร็อพเพอร์ตี้เพื่อปรับการลบล้าง
<property android:name="android.window.PROPERTY_CAMERA_COMPAT_ALLOW_REFRESH"
android:value="true|false"/>
คำสั่ง adb เพื่อทดสอบการลบล้าง
วิธีใช้การลบล้าง ซึ่งจะนำการรีเฟรชกิจกรรมออก
adb shell am compat enable OVERRIDE_CAMERA_COMPAT_DISABLE_REFRESH <package>
วิธีนำการลบล้างออก ซึ่งจะอนุญาตให้รีเฟรชกิจกรรม
adb shell am compat disable OVERRIDE_CAMERA_COMPAT_DISABLE_REFRESH <package>
หมายเหตุ: คำสั่งจะใช้หรือนำการลบล้างออกชั่วคราวเท่านั้น
OVERRIDE_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE
ทำให้แพ็กเกจที่ใช้ทำการรีเฟรชกิจกรรมโดยใช้รอบ onResume()
→ onPause()
→ onResume()
แทนที่จะเป็น onResume()
→
onStop()
→ onResume()
หลังจากบังคับให้กล้องเข้ากันได้
วิธีที่แอปให้ผลลัพธ์เหมือนกับการลบล้าง
ตั้งค่าสถานะพร็อพเพอร์ตี้ PROPERTY_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE
เป็น true
วิธีเพิ่มประสิทธิภาพแอป
ดู OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION
วิธีปิดใช้หรือเลือกไม่ใช้การลบล้าง
ตั้งค่าสถานะพร็อพเพอร์ตี้ PROPERTY_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE
เป็น false
การตั้งค่าพร็อพเพอร์ตี้เพื่อปรับการลบล้าง
<property android:name="android.window.PROPERTY_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE"
android:value="true|false"/>
คำสั่ง adb เพื่อทดสอบการลบล้าง
วิธีใช้การลบล้าง
adb shell am compat enable OVERRIDE_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE <package>
วิธีนำการลบล้างออก
adb shell am compat disable OVERRIDE_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE <package>
หมายเหตุ: คำสั่งจะใช้หรือนำการลบล้างออกชั่วคราวเท่านั้น
OVERRIDE_CAMERA_LANDSCAPE_TO_PORTRAIT
บังคับให้ครอบตัดเอาต์พุตของกล้องให้เป็นการวางแนวตรงข้ามเมื่อการวางแนวกล้องแนวตั้งไม่สอดคล้องกับการวางแนวอุปกรณ์ตามปกติ แอปจำนวนมากไม่สามารถจัดการกับสถานการณ์นี้และแสดงรูปภาพที่ยืดออก
วิธีที่แอปให้ผลลัพธ์เหมือนกับการลบล้าง
ตั้งค่าสถานะพร็อพเพอร์ตี้ PROPERTY_COMPAT_OVERRIDE_LANDSCAPE_TO_PORTRAIT
เป็น true
วิธีเพิ่มประสิทธิภาพแอป
ดู OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION
วิธีปิดใช้หรือเลือกไม่ใช้การลบล้าง
ตั้งค่าสถานะพร็อพเพอร์ตี้ PROPERTY_COMPAT_OVERRIDE_LANDSCAPE_TO_PORTRAIT
เป็น false
การตั้งค่าพร็อพเพอร์ตี้เพื่อปรับการลบล้าง
<property android:name="android.camera.PROPERTY_COMPAT_OVERRIDE_LANDSCAPE_TO_PORTRAIT"
android:value="true|false"/>
คำสั่ง adb เพื่อทดสอบการลบล้าง
วิธีใช้การลบล้าง ซึ่งจะใช้การครอบตัดของกล้องหน้าด้านใน
adb shell am compat enable OVERRIDE_CAMERA_LANDSCAPE_TO_PORTRAIT <package>
วิธีนำการลบล้างออก ซึ่งจะนำการครอบตัดของกล้องหน้าด้านในออก
adb shell am compat disable OVERRIDE_CAMERA_LANDSCAPE_TO_PORTRAIT <package>
หมายเหตุ: คำสั่งจะใช้หรือนำการลบล้างออกชั่วคราวเท่านั้น
OVERRIDE_DISABLE_MEDIA_PROJECTION_SINGLE_APP_OPTION
ป้องกันไม่ให้แอปเลือกไม่ใช้การแชร์หน้าจอแอป (ดูการฉายสื่อ) ใช้งานได้เมื่อแอปใช้ createConfigForDefaultDisplay()
API ในทางที่ผิดเพื่อบังคับใช้การจับภาพแบบเต็มหน้าจอและเสี่ยงต่อความเป็นส่วนตัวของผู้ใช้ด้วยการเปิดเผยเนื้อหาของการแจ้งเตือน ซึ่งจะจับภาพด้วยการแชร์หน้าจอแบบเต็มหน้าจอ แต่ไม่ใช่การแชร์หน้าจอแอป และแอปทั้งหมดไม่ว่าจะใช้โหมดหน้าต่างใดก็ตาม
วิธีที่แอปให้ผลลัพธ์เดียวกันกับการลบล้าง
อนุญาตลักษณะการฉายสื่อเริ่มต้น (ใช้งานใน Android 14, API ระดับ 34, โดยใช้ createScreenCaptureIntent()
) ซึ่งช่วยให้ผู้ใช้ตัดสินใจได้ว่าจะแชร์หน้าจอแบบเต็มหรือหน้าต่างแอปเดียว โดยไม่คำนึงถึงโหมดการแบ่งหน้าจอ หรือเรียกใช้ createScreenCaptureIntent(MediaProjectionConfig)
ด้วยอาร์กิวเมนต์ MediaProjectionConfig
ที่แสดงผลจากการเรียกใช้ createConfigForUserChoice()
วิธีเพิ่มประสิทธิภาพแอป
อนุญาตให้ผู้ใช้เลือกว่าจะแชร์หน้าจออุปกรณ์ทั้งหมดหรือหน้าต่างแอประหว่างการฉายสื่อ ซึ่ง Android 14 จะใช้ลักษณะการทำงานนี้เป็นค่าเริ่มต้น
ทำให้แอปปรับขนาดได้ (resizeableActivity="true"
) เพื่อรองรับโหมดหลายหน้าต่าง
วิธีปิดใช้หรือเลือกไม่ใช้การลบล้าง
แอปของคุณปิดใช้หรือเลือกไม่ใช้การลบล้างนี้ไม่ได้เนื่องจากความเป็นส่วนตัวของผู้ใช้เป็นเรื่องสำคัญ
การตั้งค่าพร็อพเพอร์ตี้เพื่อปรับการลบล้าง
ไม่มี
คำสั่ง adb เพื่อทดสอบการลบล้าง
วิธีใช้การลบล้าง ซึ่งจะยกเลิกการไม่ใช้การแชร์หน้าจอบางส่วนของแอป (กล่าวคือ เปิดใช้การแชร์หน้าจอบางส่วน)
adb shell am compat enable OVERRIDE_DISABLE_MEDIA_PROJECTION_SINGLE_APP_OPTION <package>
วิธีนำการลบล้างออก ซึ่งจะอนุญาตให้แอปเลือกไม่ใช้การแชร์หน้าจอบางส่วน
adb shell am compat disable OVERRIDE_DISABLE_MEDIA_PROJECTION_SINGLE_APP_OPTION <package>
หมายเหตุ: คำสั่งจะใช้หรือนำการลบล้างออกชั่วคราวเท่านั้น
OVERRIDE_ENABLE_COMPAT_FAKE_FOCUS
เปิดใช้การส่งโฟกัสจำลองสำหรับแอปที่ไม่ได้โฟกัสในโหมดแยกหน้าจอ เครื่องมือสร้างเกมบางเครื่องมือจะรอรับโฟกัสก่อนที่จะวาดเนื้อหาของแอป ดังนั้นโฟกัสจำลองจึงช่วยให้แอปไม่แสดงเป็นสีดําเมื่อกลับมาทํางานอีกครั้งและยังไม่มีโฟกัส
วิธีที่แอปให้ผลลัพธ์เดียวกันกับการลบล้าง
ตั้งค่าสถานะพร็อพเพอร์ตี้ PROPERTY_COMPAT_ENABLE_FAKE_FOCUS
เป็น true
วิธีเพิ่มประสิทธิภาพแอป
คุณสามารถหลีกเลี่ยงปัญหานี้ได้หากแอปจัดการการวางแนวหลายรูปแบบและการเปลี่ยนแปลงการกำหนดค่าได้ดี เตรียมแอปให้พร้อมใช้งานบนหน้าจอขนาดใหญ่โดยทำตามหลักเกณฑ์คุณภาพแอปบนหน้าจอขนาดใหญ่
หากคุณใช้เครื่องมือเกมของ Unity ให้อัปเกรดเป็นเวอร์ชัน 2019.4.40 ขึ้นไปและส่งออกเกมอีกครั้ง เลือกตัวเลือก Resizable Window
ไว้ในการตั้งค่าโปรแกรมเล่น Android
วิธีปิดใช้หรือเลือกไม่ใช้การลบล้าง
ตั้งค่าสถานะพร็อพเพอร์ตี้ PROPERTY_COMPAT_ENABLE_FAKE_FOCUS
เป็น false
การตั้งค่าพร็อพเพอร์ตี้เพื่อปรับการลบล้าง
<property android:name="android.window.PROPERTY_COMPAT_ENABLE_FAKE_FOCUS"
android:value="true|false"/>
คำสั่ง adb เพื่อทดสอบการลบล้าง
วิธีใช้การลบล้าง
adb shell am compat enable OVERRIDE_ENABLE_COMPAT_FAKE_FOCUS <package>
วิธีนำการลบล้างออก
adb shell am compat disable OVERRIDE_ENABLE_COMPAT_FAKE_FOCUS <package>
หมายเหตุ: คำสั่งจะใช้หรือนำการลบล้างออกชั่วคราวเท่านั้น
แหล่งข้อมูลเพิ่มเติม
- หลักเกณฑ์คุณภาพของแอปบนหน้าจอขนาดใหญ่
- หลักเกณฑ์คุณภาพแอปหลัก