Android จะเปิดใช้งานโหมดความเข้ากันได้สำหรับแอปที่ประกาศการวางแนวหรือ การจำกัดการปรับขนาด โหมดความเข้ากันได้ช่วยให้มั่นใจได้ว่าแอปจะทำงานได้อย่างเหมาะสมใน อุปกรณ์หน้าจอขนาดใหญ่ โทรศัพท์แบบพับได้ และสภาพแวดล้อมของเดสก์ท็อป แต่ ความสามารถในการใช้งานอาจไม่ดีเท่าที่ควร
การลบล้างต่อแอปช่วยให้ผู้ผลิตอุปกรณ์ เจ้าของอุปกรณ์เสมือน1 และผู้ใช้สามารถเปลี่ยนลักษณะการทำงานของแอปเพื่อปรับปรุงเลย์เอาต์ของแอปหรือป้องกันไม่ให้แอปทำงานไม่ถูกต้องในอุปกรณ์บางรุ่น
Android 16
Android 16 (ระดับ API 36) จะไม่สนใจข้อจำกัดด้านการวางแนวหน้าจอ สัดส่วนการแสดงผล และความสามารถในการปรับขนาดของแอปเพื่อปรับปรุงเลย์เอาต์ของแอปในรูปแบบของอุปกรณ์ที่มีความกว้างที่เล็กที่สุด >= 600dp
การลบล้างต่อแอปต่อไปนี้จะใช้ไม่ได้กับแอปที่กำหนดเป้าหมายเป็น API ระดับ 36
- FORCE_RESIZE_APP
- FORCE_NON_RESIZE_APP
- OVERRIDE_MIN_ASPECT_RATIO
- OVERRIDE_MIN_ASPECT_RATIO_PORTRAIT_ONLY
- OVERRIDE_MIN_ASPECT_RATIO_MEDIUM
- OVERRIDE_MIN_ASPECT_RATIO_LARGE
- OVERRIDE_MIN_ASPECT_RATIO_TO_ALIGN_WITH_SPLIT_SCREEN
- OVERRIDE_MIN_ASPECT_RATIO_EXCLUDE_PORTRAIT_FULLSCREEN
- OVERRIDE_ANY_ORIENTATION
- OVERRIDE_ANY_ORIENTATION_TO_USER
- OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT
- OVERRIDE_UNDEFINED_ORIENTATION_TO_NOSENSOR
- OVERRIDE_LANDSCAPE_ORIENTATION_TO_REVERSE_LANDSCAPE
- OVERRIDE_ORIENTATION_ONLY_FOR_CAMERA
- OVERRIDE_USE_DISPLAY_LANDSCAPE_NATURAL_ORIENTATION
- OVERRIDE_ENABLE_COMPAT_IGNORE_REQUESTED_ORIENTATION
- OVERRIDE_ENABLE_COMPAT_IGNORE_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED
- OVERRIDE_RESPECT_REQUESTED_ORIENTATION
- OVERRIDE_EXCLUDE_CAPTION_INSETS_FROM_APP_BOUNDS
เลือกไม่รับ
แอปของคุณสามารถกำหนดเป้าหมายเป็นระดับ API เป้าหมาย 36 แต่เลือกไม่ใช้ลักษณะการทำงานของ Android 16 ได้ ในกรณีนี้ OVERRIDE_ANY_ORIENTATION_TO_USER จะใช้ไม่ได้
ประกาศพร็อพเพอร์ตี้ไฟล์ Manifest
如需停用 API 级别 36 行为,请声明 PROPERTY_COMPAT_ALLOW_RESTRICTED_RESIZABILITY 清单属性。
如需停用特定活动,请在 <activity> 元素中设置相应属性:
<activity ...>
<property
android:name="android.window.PROPERTY_COMPAT_ALLOW_RESTRICTED_RESIZABILITY"
android:value="true" />
...
</activity>
如需为整个应用停用,请在 <application> 元素中设置该属性:
<application ...>
<property
android:name="android.window.PROPERTY_COMPAT_ALLOW_RESTRICTED_RESIZABILITY"
android:value="true" />
...
</application>
อุปกรณ์อ้างอิง
อุปกรณ์ต่อไปนี้อาจต้องมีการลบล้างต่อแอปเนื่องจากการกำหนดค่าที่ผิดปกติ หรือการกำหนดค่าที่แอปไม่รองรับได้ดี
- แท็บเล็ต: แท็บเล็ตบางรุ่น เช่น Pixel Tablet จะมีการวางแนวเริ่มต้นเป็นแนวนอน อุปกรณ์จะอยู่ในแนวนอนตามปกติเมื่อ
Display#getRotation()แสดงผลSurface.ROTATION_0หากแอปถือว่าROTATION_0เป็นแนวตั้ง เลย์เอาต์ของแอปและพรีวิวของกล้องอาจไม่ตรงกับจอแสดงผลของอุปกรณ์ - อุปกรณ์พับได้แนวนอน: อุปกรณ์พับได้บางรุ่น เช่น Pixel Fold จะอยู่ใน แนวตั้งเมื่อพับ แต่จะอยู่ในแนวนอนเมื่อกางออก หากแอปถือว่าการวางแนวที่กางออกเป็นแนวตั้ง ก็อาจเกิดการกะพริบ วนซ้ำหรือปัญหาเกี่ยวกับเลย์เอาต์
- โทรศัพท์ฝาพับแบบพับได้: โดยปกติแล้วโทรศัพท์ฝาพับที่กางออกจะอยู่ในแนวนอน แต่เมื่อพับแล้ว โทรศัพท์มักจะมีจอแสดงผลขนาดเล็กใน แนวนอน แอปต้องระบุและรองรับการวางแนวของจอแสดงผลที่แตกต่างกัน
- จอแสดงผลภายนอก: อุปกรณ์บางรุ่นสามารถเริ่มเซสชันการใช้งานหน้าต่างเดสก์ท็อป บนจอแสดงผลภายนอกที่เชื่อมต่อได้ แอปต้องค้นหาจอแสดงผลภายนอกเพื่อดูข้อมูล เช่น ขนาดหน้าจอและความละเอียด มิฉะนั้นแอปอาจคาดการณ์เกี่ยวกับจอแสดงผลอย่างไม่ถูกต้อง ซึ่งอาจทําให้แอปทํางานไม่ถูกต้อง
- จอแสดงผลในรถยนต์: จอแสดงผลในรถยนต์ส่วนใหญ่เป็นแนวนอน แต่ก็มีบางรุ่นที่เป็นแนวตั้ง การพัฒนาแอปที่จอดรถสำหรับจอแสดงผลในรถยนต์จะคล้ายกับการพัฒนาสำหรับแท็บเล็ต
ปัญหาด้านความเข้ากันได้ที่พบบ่อย
แอปมักประสบปัญหาด้านความเข้ากันได้เนื่องจากข้อจำกัดด้านการวางแนวของแอป ข้อจำกัดด้านความสามารถในการปรับขนาดและสัดส่วนภาพ การจัดการการวางแนวของ พรีวิวกล้องที่ไม่ถูกต้อง และการใช้ API ในทางที่ผิด
เล็ทเทอร์บ็อกซิง
การแสดงจอดำบนและล่างจะวางแอปไว้ตรงกลางหน้าจอ หรือในหน้าจอขนาดใหญ่ จะวางไว้ที่ด้านใดด้านหนึ่งเพื่อให้เข้าถึงได้สะดวก แมตต์ (แถบสีทึบ หรือวอลเปเปอร์เบลอ) จะเติมพื้นที่แสดงผลที่ไม่ได้ใช้ตามด้านข้างหรือด้านบนและ ด้านล่างของแอป
การเกิดแถบดำด้านบนและด้านล่างมักเกิดขึ้นในอุปกรณ์หน้าจอขนาดใหญ่ เนื่องจากมิติข้อมูลและ สัดส่วนภาพของจอแสดงผลในอุปกรณ์มักแตกต่างจากของโทรศัพท์มาตรฐาน ซึ่งเป็นอุปกรณ์ที่แอปส่วนใหญ่ออกแบบมาให้ใช้งาน
รูปที่ 1 แอปที่จำกัดเฉพาะการวางแนวตั้งจะแสดงเป็นแถบดำด้านข้างบนแท็บเล็ตแนวนอนและอุปกรณ์แบบพับได้
ปัญหา
แอปไม่รองรับการกำหนดค่าการแสดงผลทั้งหมดเนื่องจากแอปมี การวางแนวคงที่ อัตราส่วนคงที่ หรือปรับขนาดไม่ได้
การตั้งค่าการกำหนดค่าที่ควบคุมการวางแนวและความสามารถในการปรับขนาดของแอปมีดังนี้
screenOrientation: ระบุการวางแนวคงที่สำหรับ แอป นอกจากนี้ แอปยังตั้งค่าการวางแนวที่รันไทม์ได้โดยใช้Activity#setRequestedOrientation()resizeableActivity: ระบุว่าระบบสามารถ ปรับขนาดแอปให้พอดีกับหน้าต่างที่มีขนาดต่างๆ ได้หรือไม่ ใน Android 11 (ระดับ API 30) และต่ำกว่า จะระบุว่าแอปรองรับโหมดหลายหน้าต่างหรือไม่ ใน Android 12 (API ระดับ 31) ขึ้นไป จะระบุว่าแอป รองรับโหมดหลายหน้าต่างในหน้าจอขนาดเล็ก (คลาสขนาดหน้าต่างแบบกะทัดรัด) หรือไม่ ใน Android 12 ขึ้นไป แอปจะรองรับโหมดหลายหน้าต่างบนหน้าจอขนาดใหญ่ (คลาสขนาดหน้าต่างปานกลางหรือขยาย) โดยไม่คำนึงถึงการตั้งค่านี้maxAspectRatio: ระบุสัดส่วนภาพสูงสุด ที่แอปรองรับ เฉพาะแอปที่ตั้งค่าresizeableActivityเป็นfalseเท่านั้นที่ตั้งค่าmaxAspectRatioได้minAspectRatio: ระบุอัตราส่วนภาพขั้นต่ำ ที่แอปรองรับ เฉพาะแอปที่มีresizeableActivityตั้งค่าเป็นfalseเท่านั้นที่ ตั้งค่าminAspectRatioได้
แอปที่จำกัดให้ใช้ได้เฉพาะในแนวตั้งจะใช้ในอุปกรณ์แนวนอนไม่ได้
การเพิ่มประสิทธิภาพ
แอปควรรองรับการแสดงผลในอุปกรณ์ทั้งหมดและโหมดหลายหน้าต่าง การวางแนวและขนาด นําข้อจํากัดด้านการวางแนวและสัดส่วนคงที่ ทั้งหมดออกจากเลย์เอาต์แอปและไฟล์ Manifest ของแอป
แอปพลิเคชันรองรับการวางแนวอุปกรณ์ทั้งหมด
วิธีแก้ปัญหาชั่วคราวเกี่ยวกับความเข้ากันได้
หากแอปที่มีการวางแนวหรือสัดส่วนภาพคงที่ทำงานในหน้าต่างที่แอปไม่รองรับขนาดหรือการวางแนวของหน้าต่างโดยตรง Android จะแสดงแถบดำด้านบนและด้านล่างของแอปเพื่อรักษาความต่อเนื่อง
ตั้งแต่ Android 12 (API ระดับ 31) และต่อเนื่องไปจนถึง 12L (API ระดับ 32) แพลตฟอร์มจะใช้การเพิ่มประสิทธิภาพต่างๆ กับแอปที่แสดงแบบกล่องจดหมาย ผู้ผลิต อุปกรณ์จะใช้การเพิ่มประสิทธิภาพ UI คุณไม่จำเป็นต้องทำการพัฒนาเพิ่มเติม เพื่อให้แอปได้รับประโยชน์จากการปรับปรุง
Android 12 (ระดับ API 31) มีการปรับปรุงด้านความสวยงามต่อไปนี้ ซึ่งผู้ผลิตอุปกรณ์สามารถกำหนดค่าได้
- มุมโค้ง: มุมของหน้าต่างแอปดูสวยงามยิ่งขึ้น
- ความโปร่งใสของแถบระบบ: แถบสถานะและแถบนำทางที่ซ้อนทับแอปจะโปร่งแสงบางส่วน ทำให้ไอคอนในแถบมองเห็นได้เสมอเมื่ออยู่เหนือพื้นหลังแบบ Letterbox
- สัดส่วนภาพที่กำหนดค่าได้: ปรับสัดส่วนภาพของแอปได้ เพื่อปรับปรุงรูปลักษณ์ของแอป
รูปที่ 2 แอปแบบ Letterbox พร้อมการเพิ่มประสิทธิภาพ UI
12L (ระดับ API 32) มีการปรับปรุงฟังก์ชันการทำงานดังต่อไปนี้
การวางตำแหน่งที่กำหนดค่าได้: ในหน้าจอขนาดใหญ่ ผู้ผลิตอุปกรณ์สามารถ วางตำแหน่งแอปไว้ทางด้านซ้ายหรือขวาของจอแสดงผล ซึ่งจะช่วยให้ โต้ตอบได้ง่ายขึ้น
ปุ่มรีสตาร์ทที่ออกแบบใหม่: ผู้ผลิตอุปกรณ์สามารถปรับโฉมปุ่มรีสตาร์ท สำหรับโหมดความเข้ากันได้ของขนาด เพื่อให้ผู้ใช้จดจำได้ดียิ่งขึ้น
Android 13 (API ระดับ 33) เพิ่มกล่องโต้ตอบการให้ความรู้แก่ผู้ใช้เกี่ยวกับการวางตำแหน่งแอปที่แสดงแถบดำด้านบนและด้านล่าง บนหน้าจอหรือการรวมแถบดำด้านบนและด้านล่างในโหมดแยกหน้าจอ
รูปที่ 3 แอปที่มีแถบดำด้านบนและด้านล่างพร้อมกล่องโต้ตอบการให้ความรู้แก่ผู้ใช้
โหมดความเข้ากันได้ของขนาด
โหมดความเข้ากันได้ของขนาดคือการแสดงผลแบบจดหมายที่รักษาสัดส่วนภาพของแอปและ มีการควบคุมการรีสตาร์ท โดยตัวควบคุมนี้ช่วยให้ผู้ใช้รีสตาร์ทแอปและ วาดการแสดงผลใหม่ได้ Android จะเรียกใช้โหมดความเข้ากันได้ของขนาดสำหรับแอปที่ ปรับขนาดไม่ได้ เมื่อกิจกรรมย้ายไปยังคอนเทนเนอร์จอแสดงผลที่ไม่เข้ากัน กับขนาดของกิจกรรม ระบบอาจปรับขนาดแอปใหม่เพื่อให้ จอแสดงผลของอุปกรณ์เต็มในอย่างน้อย 1 มิติ
การเปลี่ยนแปลงการกำหนดค่าอุปกรณ์ที่อาจทําให้เกิดโหมดความเข้ากันได้ของขนาดมีดังนี้
- การหมุนอุปกรณ์
- อุปกรณ์ที่พับได้กำลังพับหรือกางออก
- เปลี่ยนระหว่างโหมดการแสดงผลแบบเต็มหน้าจอและแบบแยกหน้าจอ
ปัญหา
โดยปกติแล้ว โหมดความเข้ากันได้ของขนาดจะใช้กับกิจกรรมที่ถูกจำกัดใน การวางแนวหรือสัดส่วนภาพ และได้รับการกำหนดค่า (หรือกำหนดโดยระบบ) ให้ ปรับขนาดไม่ได้
ระบบจะถือว่าแอปของคุณปรับขนาดได้และจะไม่วางแอปในโหมดความเข้ากันได้ของขนาด หากแอปเป็นไปตามเกณฑ์ต่อไปนี้
- ปรับขนาดได้ด้วย
resizeableActivity="true" - รองรับโหมดการแสดงภาพซ้อนภาพ (PIP)
- ฝัง
- มีการใช้การลบล้างต่อแอปของ
FORCE_RESIZE_APPโดย ผู้ผลิตอุปกรณ์ (ระบบจะไม่สนใจพร็อพเพอร์ตี้ที่แอปตั้งค่าไว้)
หากแอปของคุณไม่เป็นไปตามเงื่อนไขใดๆ ระบบจะถือว่าแอปปรับขนาดไม่ได้และอาจอยู่ในโหมดความเข้ากันได้ของขนาด
แอปแบบปรับขนาดไม่ได้ขัดข้องในโหมดหลายหน้าต่าง
การเพิ่มประสิทธิภาพ
แอปควรรองรับขนาดการแสดงผลทั้งหมด ทําให้แอปปรับขนาดได้โดยตั้งค่าแอตทริบิวต์
android:resizeableActivityขององค์ประกอบ <activity>
หรือ <application> เป็น true ใน
ไฟล์ Manifest ของแอป ออกแบบเลย์เอาต์ที่ปรับเปลี่ยนตามอุปกรณ์/เลย์เอาต์ที่ปรับตามขนาดหน้าจอสำหรับแอปของคุณ ดูข้อมูลเพิ่มเติมได้ที่รองรับขนาดการแสดงผลต่างๆ และรองรับโหมดหลายหน้าต่าง
แอปทำงานได้ในทุกขนาดหน้าต่าง
วิธีแก้ปัญหาชั่วคราวเกี่ยวกับความเข้ากันได้
Android จะนำแอปไปไว้ในโหมดความเข้ากันได้ของขนาดเมื่อระบบพิจารณาว่าการแสดงแอปที่อยู่ในกรอบดำสามารถปรับปรุงได้โดยการปรับขนาดแอปเพื่อเติมเต็มหน้าต่างแสดงผลในอย่างน้อย 1 มิติ ระบบจะแสดงตัวควบคุมการรีสตาร์ท ซึ่งจะสร้างกระบวนการของแอปขึ้นใหม่ สร้างกิจกรรมขึ้นใหม่ และวาดการแสดงผล อีกครั้ง ดูภาพรวมกระบวนการและเธรดด้วย
แอปแนวตั้งเท่านั้นที่แสดงเป็นแถบดำด้านข้างในแนวนอน โดยตัวควบคุมการรีสตาร์ทจะปรับขนาด
โหมดความเข้ากันได้ของการแสดงผล
โหมดความเข้ากันได้ของจอแสดงผลจะป้องกันไม่ให้แอปรีสตาร์ทเมื่อแอปย้าย ระหว่างจอแสดงผลต่างๆ ซึ่งอาจทริกเกอร์การเปลี่ยนแปลงการกำหนดค่า เช่น โหมดสี ความพร้อมใช้งานของหน้าจอสัมผัส หรือ การเปลี่ยนแปลงความหนาแน่นของหน้าจอ
ระบบจะเปิดใช้โหมดความเข้ากันได้ของการแสดงผลสำหรับเกมโดยค่าเริ่มต้น (อิงตามแฟล็ก
android:appCategory) เพื่อปรับปรุงความเสถียรและความต่อเนื่อง
โหมดความเข้ากันได้ของการแสดงผลจะไม่หยุดการกำหนดค่าของแอปไว้เหมือนกับโหมดความเข้ากันได้ของขนาด แอปจะยังคงได้รับการอัปเดตการกำหนดค่าทั้งหมดผ่าน
API เช่น Callback ของ onConfigurationChanged() แต่จะไม่ต้องรีสตาร์ท
ที่รบกวนการทำงาน ซึ่งหมายความว่าเกมที่รองรับ API อย่างเหมาะสม เช่น
onConfigurationChanged() จะยังคงอัปเดต UI ได้อย่างรวดเร็วแม้ว่าจะอยู่ในโหมดความเข้ากันได้ของจอแสดงผลก็ตาม
หากต้องการเลือกไม่ใช้โหมดความเข้ากันได้ของการแสดงผลและจัดการการเปลี่ยนแปลงการกำหนดค่าในแอป ให้ประกาศการรองรับการเปลี่ยนแปลงการกำหนดค่าในไฟล์ AndroidManifest.xml ของแอป และจัดการการเปลี่ยนแปลงการกำหนดค่าในแฮนเดิลการเรียกกลับ onConfigurationChanged()
<activity
android:name=".MyGameActivity"
android:configChanges="colorMode|touchscreen|density|...">
...
</activity>
ลูปกะพริบ
เมื่อแอปไม่รองรับการวางแนวการแสดงผลทั้งหมด แอปอาจขอการวางแนวใหม่ซ้ำๆ เมื่อมีการเปลี่ยนแปลงการกำหนดค่า ซึ่งจะทำให้เกิด ลูปที่ไม่มีที่สิ้นสุดที่ทำให้จอแสดงผลกะพริบหรือแอปหมุนไปเรื่อยๆ
ปัญหา
ใน 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() ซ้ำๆ
การเพิ่มประสิทธิภาพ
แอปไม่ควรทำสิ่งต่อไปนี้
- ตั้งค่าการวางแนวเริ่มต้นด้วย
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 บางรายการออกแบบมาเพื่อวัตถุประสงค์พิเศษที่นักพัฒนาแอปอาจไม่เข้าใจดีนัก
ปัญหา
นักพัฒนาแอปยังคงใช้ DisplayAPI ที่เลิกใช้งานแล้วและเข้าใจผิดว่า API จะแสดงขอบเขตของแอปแทนขอบเขตพื้นที่แสดงผลของอุปกรณ์ หรือนักพัฒนาแอป
ใช้ API ของมุมมองแบบพิเศษเพื่อรับเมตริกการแสดงผลทั่วไปโดยไม่ตั้งใจ
ผลลัพธ์คือการคำนวณผิดเมื่อจัดตำแหน่งองค์ประกอบ UI ใหม่หลังจากเหตุการณ์การปรับขนาดหน้าต่างแอป
ซึ่งทำให้เกิดปัญหาเกี่ยวกับเลย์เอาต์
API Display ที่เลิกใช้งานแล้วและมักมีการใช้งานในทางที่ผิด
ดูข้อมูลเพิ่มเติมได้ที่ รองรับโหมดหลายหน้าต่าง
API การดูที่ถูกนำไปใช้ในทางที่ผิด:
API ที่เลิกใช้งานแล้วคำนวณขอบเขตของแอปไม่ถูกต้อง เนื้อหาแอปอยู่นอกหน้าจอ
การเพิ่มประสิทธิภาพ
อย่าวางตำแหน่งองค์ประกอบ UI โดยอิงตามขนาดการแสดงผลจริง ย้ายข้อมูลแอปไปยัง API ที่อิงตาม WindowMetrics ซึ่งรวมถึง API ต่อไปนี้
WindowManager
แพลตฟอร์ม:
Jetpack:
API คำนวณเมตริกหน้าต่างแอปได้อย่างถูกต้อง
วิธีแก้ปัญหาชั่วคราวเกี่ยวกับความเข้ากันได้
การลบล้าง 2 รายการจะปรับ API ของ Display ที่เลิกใช้งานแล้วและ API ของ View ที่ใช้ในทางที่ผิดเพื่อ
แสดงขอบเขตของแอป
ALWAYS_SANDBOX_DISPLAY_APIS สำหรับ API ของ Display
OVERRIDE_SANDBOX_VIEW_BOUNDS_APIS
สำหรับ API ของ View 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
หากกิจกรรมแทรมโพลีนเปิดคำขอสิทธิ์ ผู้ใช้อาจไม่เห็นกล่องโต้ตอบสิทธิ์เนื่องจากกิจกรรมแทรมโพลีนจะถูกทำลายก่อนที่ผู้ใช้จะมีโอกาสตอบกลับกล่องโต้ตอบ และระบบอาจคำนวณขนาดและตำแหน่งของกิจกรรมกล่องโต้ตอบไม่ถูกต้อง
แอปควรเปิดคำขอสิทธิ์จากกิจกรรมที่ยังคง มองเห็นได้จนกว่าผู้ใช้จะตัดสินใจเกี่ยวกับสิทธิ์
มุมมน
กิจกรรมอาจโปร่งใสเนื่องจากสไตล์ที่ระบุความโปร่งใสของพื้นหลัง หรือเนื่องจากเนื้อหาของกิจกรรมไม่เต็มพื้นที่แสดงที่มีอยู่ หากกิจกรรมโปร่งใสเติมเต็มพื้นที่แสดงผลที่มีอยู่ ระบบจะใช้มุมโค้งกับกิจกรรมโดยอัตโนมัติเมื่อผู้ผลิตอุปกรณ์กำหนดค่าให้ทำเช่นนั้น แต่หากกิจกรรมโปร่งใส (เช่น กล่องโต้ตอบสิทธิ์) ไม่เติมพื้นที่ว่างที่มีอยู่ คุณจะต้องเป็นผู้กำหนดว่าจะใช้มุมโค้งหรือไม่
กล่องโต้ตอบสิทธิ์จะไม่เติมพื้นที่แสดงผลที่ใช้ได้เนื่องจากเลย์เอาต์กล่องโต้ตอบ มักใช้ 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
เพื่อระบุเหตุการณ์โฟกัสปลอมให้กับแอปใน
โหมดหลายหน้าต่าง การลบล้างจะช่วยให้กิจกรรมวาดเนื้อหาใหม่และ
ไม่ถูกปิดกั้น
หน้าต่างเดสก์ท็อป
เมื่อแอปทำงานในสภาพแวดล้อมการแสดงหน้าต่างเดสก์ท็อป แอปอาจพบ โหมดความเข้ากันได้เพิ่มเติม
แอปที่มีการวางแนวที่ล็อกจะปรับขนาดได้อย่างอิสระ แม้ว่ากิจกรรมจะล็อกเป็นการวางแนวตั้ง แต่ผู้ใช้ยังคงปรับขนาดแอปเป็นการวางแนวนอนได้
แอปที่มีการวางแนวที่ล็อกจะยังคงปรับขนาดได้อย่างอิสระ
อย่างไรก็ตาม หากประกาศกิจกรรมเป็นแบบปรับขนาดไม่ได้ (resizeableActivity = false) UI ของกิจกรรมจะปรับขนาดโดยคง สัดส่วนเดิมไว้
กิจกรรมที่ประกาศว่าปรับขนาดไม่ได้จะมี UI ที่ปรับขนาด
การแสดงตัวอย่างจากกล้องในหน้าต่างเดสก์ท็อป
เมื่อแอปทำงานในหน้าต่างเดสก์ท็อป การหมุนจอแสดงผลและการวางแนวหน้าต่างอาจแตกต่างจากที่พบในโหมดเต็มหน้าจอในโทรศัพท์มาตรฐาน
ปัญหา
แอปมักจะสันนิษฐานว่าการวางแนวอุปกรณ์และการวางแนวเซ็นเซอร์กล้องเป็น แนวตั้ง ซึ่งอาจทำให้พรีวิวของกล้องไม่ตรงแนวหรือบิดเบี้ยว
การเพิ่มประสิทธิภาพ
แอปกล้องต้องระบุและจัดการการวางแนวอุปกรณ์และการวางแนวเซ็นเซอร์กล้องอย่างถูกต้องเพื่อแสดงตัวอย่างกล้องที่จัดแนวและปรับขนาดอย่างถูกต้อง แอปต้องคำนวณการหมุนอุปกรณ์ การหมุนเซ็นเซอร์ และสัดส่วนภาพของหน้าต่าง จากนั้นนำผลลัพธ์ไปใช้กับการแสดงตัวอย่างกล้อง ซึ่งควรตอบสนองต่อ การเปลี่ยนแปลงการกำหนดค่าหน้าต่างด้วย ดูคำแนะนำแบบละเอียดได้ที่ตัวอย่างกล้อง
วิธีแก้ปัญหาชั่วคราวเกี่ยวกับความเข้ากันได้
เมื่อแอปที่มีการวางแนวคงที่ในระบบหน้าต่างบนเดสก์ท็อปเริ่มแสดงตัวอย่างกล้อง ระบบอาจทริกเกอร์การประมวลผลความเข้ากันได้ของกล้องเพื่อหลีกเลี่ยงการแสดงตัวอย่างที่ยืดออกและ แสดงด้านข้าง
การดูแลจะจำกัดสภาพแวดล้อมเพื่อจับคู่การวางแนวที่ขอในลักษณะต่อไปนี้
ใส่แถบดำด้านข้างหน้าต่างแอปให้เป็นไปตามการวางแนวที่ขอ: เพื่อหลีกเลี่ยงปัญหา การยืดเนื่องจากการปรับขนาดที่ไม่เหมาะสม
แซนด์บ็อกซ์การหมุนจอแสดงผล: กลุ่มทดสอบจะจำลองอุปกรณ์ ที่วางในแนวนอนหรือแนวตั้งตามที่ขอ เนื่องจากสมมติฐานที่ไม่ถูกต้องที่พบบ่อยที่สุด สำหรับพรีวิวของกล้องคือแอปทำงานบนอุปกรณ์แนวตั้ง การหมุนจอแสดงผล จึงอยู่ในแซนด์บ็อกซ์ที่ 0 องศาสำหรับแอปที่ขอการวางแนวแนวตั้ง และ 90 องศาสำหรับอุปกรณ์ที่ขอการวางแนวแนวนอน
การครอบตัดกล้อง: หากการหมุนจอแสดงผลมีการเปลี่ยนแปลง การเปลี่ยนแปลงนี้จะแสดงในฟีดกล้อง หากอุปกรณ์อยู่ในแนวนอนและระบบทริกเกอร์การดำเนินการสำหรับแอปที่ขอการวางแนวตั้ง ระบบจะครอบตัดมุมมองของกล้องให้คล้ายกับกล้องที่วางแนวตั้ง
หมุนและครอบตัดฟีดกล้อง: ระบบจะวนรอบผ่านเมธอดกิจกรรม
onStop()และonStart()(โดยค่าเริ่มต้น) หรือonPause()และonResume()(ใช้โดยการลบล้างต่อแอป OVERRIDE_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE) หลังจากใช้การรักษาเพื่อให้แน่ใจว่าตัวอย่างกล้องแสดงอย่างถูกต้อง
นักพัฒนาแอปสามารถลบล้างวิธีแก้ปัญหาเหล่านี้ได้หากแอปจัดการตัวอย่างกล้องอย่างถูกต้อง ดูการลบล้างต่อแอป
กำลังปรับขนาด
เมื่อการทดสอบการวางแนวที่จำลองคำขอทำงานอยู่ การปรับขนาดหน้าต่างจะปรับขนาด UI ช่องมองภาพในขณะที่ยังคงอัตราส่วนภาพไว้ ส่วนที่เหลือของ หน้าต่างแอปสามารถปรับขนาดได้อย่างอิสระ
การปรับขนาดหน้าต่างที่มีช่องมองภาพของกล้อง
ทดสอบแอปเพื่อหาปัญหาความเข้ากันได้
หากต้องการทดสอบแอปและทำความเข้าใจลักษณะการทำงานของแอปในอุปกรณ์รูปแบบต่างๆ ให้ใช้ประโยชน์จากแหล่งข้อมูลต่อไปนี้
- การสตรีมอุปกรณ์: หากต้องการทดสอบแอปในอุปกรณ์ที่ใช้จริง (รวมถึงอุปกรณ์อ้างอิง) ที่โฮสต์ในศูนย์ข้อมูลของ Google โปรดดูการสตรีมอุปกรณ์ Android ที่ขับเคลื่อนโดย Firebase
- โปรแกรมจำลองใน Android Studio: ดูข้อมูลเกี่ยวกับการสร้าง โปรแกรมจำลองสำหรับอุปกรณ์อ้างอิงได้ที่ สร้างและจัดการอุปกรณ์เสมือน
- โปรแกรมจำลองที่ปรับขนาดได้ของ Android Studio: ดูข้อมูลเกี่ยวกับการเข้าถึงอุปกรณ์เสมือนได้ที่เรียกใช้แอปใน Android Emulator
มีแถบดำด้านบน-ล่างของภาพ
ตรวจสอบว่าแต่ละกิจกรรมใช้พื้นที่แสดงผลทั้งหมดที่แอปมีได้ ก่อนอื่น ให้ประกาศโค้ดต่อไปนี้ในโฟลเดอร์ทดสอบ
Kotlin
fun isLetterboxed(activity: AppCompatActivity): 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(AppCompatActivity 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 { assertFalse(it.isLetterboxed()) } }
Java
@Rule public ActivityScenarioRule<MainActivity> rule = new ActivityScenarioRule<>(MainActivity.class); @Test public void activity_launched_notLetterBoxed() { try (ActivityScenario<MainActivity> scenario = ActivityScenario.launch(MainActivity.class)) { scenario.onActivity( activity -> { assertFalse(activity.isLetterboxed()); }); } }
โดยหลักการแล้ว ให้เรียกใช้การทดสอบประเภทนี้จนกว่าจะผ่านและยืนยันว่ากิจกรรมของแอปใช้พื้นที่แสดงผลทั้งหมดที่แอปใช้ได้ ทดสอบแอปในอุปกรณ์ทุกประเภทเพื่อให้มั่นใจว่าแอปทำงานสอดคล้องกัน
การลบล้างต่อแอป
Android มีการลบล้างที่จะเปลี่ยนลักษณะการทำงานที่กำหนดค่าไว้ของแอป เช่น FORCE_RESIZE_APP ลบล้างจะสั่งให้ระบบข้ามโหมดความเข้ากันได้ของขนาดและปรับขนาดแอปให้พอดีกับขนาดการแสดงผล แม้ว่า resizeableActivity="false" จะระบุไว้ในไฟล์ Manifest ของแอปก็ตาม
ผู้ผลิตอุปกรณ์จะใช้การลบล้างกับแอปบางแอปหรือทุกแอปในอุปกรณ์ที่เฉพาะเจาะจง ใน Android 14 (ระดับ API 34) ขึ้นไป ผู้ใช้สามารถใช้การลบล้างกับแอปผ่านการตั้งค่าอุปกรณ์ได้ ใน Android 16 (ระดับ API 36) ขึ้นไป เจ้าของอุปกรณ์เสมือนจะใช้การลบล้างในอุปกรณ์บางรุ่นที่เจ้าของอุปกรณ์เสมือนจัดการ
การลบล้างต่อแอปของผู้ใช้
ใน 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จะไม่มีผล
เพิ่มประสิทธิภาพแอปสำหรับทุกหน้าจอ: อย่าตั้งค่าการจำกัดสัดส่วนภาพในแอป ให้ใช้คลาสขนาดหน้าต่างเพื่อรองรับเลย์เอาต์ต่างๆ ตามจำนวนพื้นที่แสดงผลที่ใช้ได้
การลบล้างระดับแอปของอุปกรณ์
ผู้ผลิตอุปกรณ์และเจ้าของอุปกรณ์เสมือนจริง (เลือกแอปที่เชื่อถือได้และได้รับสิทธิ์) จะใช้การลบล้างในแต่ละแอปบนอุปกรณ์ที่เฉพาะเจาะจง ซึ่งรวมถึงแท็บเล็ต, อุปกรณ์พับได้, อุปกรณ์ ChromeOS และจอแสดงผลในรถยนต์ อุปกรณ์อ้างอิงอาจใช้การลบล้างบางอย่างกับแอปต่างๆ โดยค่าเริ่มต้น
แอปสามารถเลือกไม่ใช้การลบล้างส่วนใหญ่ได้ (ดูตารางการลบล้าง ต่อแอปด้านล่าง)
คุณทดสอบแอปโดยเปิดหรือปิดใช้การลบล้างได้โดยใช้เฟรมเวิร์กความเข้ากันได้ (ดูเครื่องมือเฟรมเวิร์กความเข้ากันได้) เมื่อเปิดใช้ การลบล้างจะมีผลกับทั้งแอป
นอกจากนี้ คุณยังใช้ Android Debug Bridge (adb) เพื่อเปิดหรือปิดใช้ การลบล้าง และระบุว่าการลบล้างใดที่ใช้กับแอปได้ด้วย
เปิดหรือปิดใช้การลบล้างโดยทำดังนี้
adb shell am compat enable/disable <override name/id> <package>
สำหรับอุปกรณ์อ้างอิง ให้ตรวจสอบว่าการลบล้างใดมีผลกับแอปของคุณ
adb shell dumpsys platform_compat | grep <package name>
ตารางต่อไปนี้แสดงรายการการลบล้างที่มีอยู่พร้อมกับคำแนะนำเกี่ยวกับวิธี เพิ่มประสิทธิภาพแอปเพื่อให้แอปไม่จำเป็นต้องอาศัยการลบล้าง คุณเพิ่ม แฟล็กพร็อพเพอร์ตี้ลงในไฟล์ Manifest ของแอปเพื่อเลือกไม่ใช้การลบล้างบางอย่างได้
| การลบล้างต่อแอป | |||
|---|---|---|---|
| ประเภท | ชื่อ | รหัส | คำอธิบาย |
| Input Compat | OVERRIDE_MOUSE_TO_TOUCH | 413207127 | แปลงอินสแตนซ์ MotionEvent จากอุปกรณ์เมาส์เป็นเหตุการณ์การแตะโดยการเขียนซ้ำแหล่งที่มาและประเภทเครื่องมือของ MotionEvent เมื่อมีการนำส่งไปยังแอปพลิเคชัน |
| การปรับขนาดได้ | FORCE_RESIZE_APP | 174042936 | ข้ามโหมดความเข้ากันได้ของขนาดสำหรับแอปเมื่อมีการเปลี่ยนแปลงการกำหนดค่า |
| FORCE_NON_RESIZE_APP | 181136395 | บังคับให้แอปเข้าสู่โหมดความเข้ากันได้ของขนาดเมื่อมีการเปลี่ยนแปลงการกำหนดค่า | |
| สัดส่วนภาพ | OVERRIDE_MIN_ASPECT_RATIO | 174042980 | การลบล้าง Gatekeeper ที่ต้องเปิดใช้เพื่อใช้การลบล้างสัดส่วนภาพอื่นๆ |
| OVERRIDE_MIN_ASPECT_RATIO_PORTRAIT_ONLY | 203647190 | หากเปิดใช้ (ค่าเริ่มต้น) ขีดจำกัดจะลบล้างขอบเขตเป็นกิจกรรมแนวตั้งเท่านั้น | |
| OVERRIDE_MIN_ASPECT_RATIO_SMALL | 349045028 | เปลี่ยนสัดส่วนภาพขั้นต่ำเป็น 4:3 | |
| 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 | ป้องกันการเกิดแถบดำโดยการปิดใช้การตั้งค่าคำขอการวางแนวที่ผู้ผลิตอุปกรณ์ไม่สนใจ | |
| API แซนด์บ็อกซ์ | NEVER_SANDBOX_DISPLAY_APIS | 184838306 | ป้องกันการเปลี่ยนแปลงลักษณะการทำงานของ API การแสดงผล |
| ALWAYS_SANDBOX_DISPLAY_APIS | 185004937 | บังคับให้ Display API ในแอปแสดงขอบเขตของแอป Display API จะแสดงขอบเขตพื้นที่แสดงผลเชิงตรรกะ แต่บางครั้งแอปจะถือว่า Display API แสดงขอบเขตของแอป ซึ่งทำให้เกิดปัญหาเกี่ยวกับ UI |
|
| OVERRIDE_SANDBOX_VIEW_BOUNDS_APIS | 237531167 | บังคับให้ View API ที่ใช้ในแอปแสดงขอบเขตของแอป View API จะแสดงขอบเขตพื้นที่แสดงผลเชิงตรรกะ แต่บางครั้งแอปจะถือว่า View API แสดงขอบเขตของแอป ซึ่งทำให้เกิดปัญหาเกี่ยวกับ UI |
|
| ความเข้ากันได้ของกล้อง | OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION | 263959004 | ปิดการหมุนบังคับ โดยค่าเริ่มต้น ระบบจะบังคับหมุนแอปกล้องที่มีการวางแนวคงที่ทั้งหมดเมื่อเปิดตัวอย่างกล้อง |
| OVERRIDE_CAMERA_COMPAT_DISABLE_SIMULATE_REQUESTED_ORIENTATION | 398195815 | ปิดการจำลองการปรับการวางแนวที่ขอเพื่อความเข้ากันได้ของกล้อง โดยค่าเริ่มต้น ระบบจะปรับแอปกล้องที่มีการวางแนวคงที่ตามการวางแนวที่ขอเมื่อเปิดตัวอย่างกล้อง | |
| 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 ส่งเหตุการณ์โฟกัสปลอมไปยังแอปได้ ซึ่งจะส่งสัญญาณให้แอปเริ่มวาดเนื้อหาอีกครั้ง |
OVERRIDE_MOUSE_TO_TOUCH
เปิดใช้การจัดการความเข้ากันได้ซึ่งจะแปลงอินสแตนซ์ MotionEvent จากเมาส์หรือทัชแพดเป็นเหตุการณ์การแตะโดยการเขียนMotionEventแหล่งที่มาใหม่เป็น SOURCE_TOUCHSCREEN และMotionEventประเภทเครื่องมือเป็น TOOL_TYPE_FINGER เมื่อมีการส่งเหตุการณ์การเคลื่อนไหวไปยังแอปพลิเคชัน
วิธีที่แอปจะให้ผลลัพธ์เหมือนกับการลบล้าง
ไม่เกี่ยวข้อง คุณควรแก้ปัญหาในตรรกะของแอปพลิเคชัน
วิธีเพิ่มประสิทธิภาพแอป
แอปของคุณควรจัดการเหตุการณ์อินพุตจากเมาส์และทัชแพด รวมถึงท่าทางสัมผัสของทัชแพดและการเลื่อนล้อเมาส์ ดูแป้นพิมพ์ เมาส์ และแทร็กแพด
วิธีปิดใช้หรือเลือกไม่ใช้การลบล้าง
ประกาศ FEATURE_PC ในองค์ประกอบ <uses-feature> ในไฟล์ Manifest ของแอปพลิเคชัน
<uses-feature android:name="android.hardware.type.pc"
android:required="false" />
หมายเหตุ: ตั้งค่า android:required="false" เพื่อให้ฟีเจอร์ PC เป็นตัวเลือกและ Google Play ไม่ยกเว้นแอปพลิเคชันในอุปกรณ์ที่ไม่ใช่ PC
แฟล็กพร็อพเพอร์ตี้เพื่อปรับการลบล้าง
ไม่มี
คำสั่ง adb เพื่อทดสอบการลบล้าง
วิธีใช้การลบล้าง
adb shell am compat enable OVERRIDE_MOUSE_TO_TOUCH <package>
วิธีนำการลบล้างออก
adb shell am compat disable OVERRIDE_MOUSE_TO_TOUCH <package>
หมายเหตุ: คำสั่งจะมีผลชั่วคราวหรือนำการลบล้างออกเท่านั้น
FORCE_RESIZE_APP
บังคับให้แพ็กเกจที่ใช้การลบล้างสามารถปรับขนาดได้และเข้าสู่โหมดหลายหน้าต่างได้ ใช้ได้กับจอแสดงผลทุกขนาด
วิธีที่แอปจะให้ผลลัพธ์เหมือนกับการลบล้าง
ในไฟล์ Manifest ของแอป ให้ตั้งค่าแอตทริบิวต์ android:resizeableActivity
เป็น 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>
หมายเหตุ: คำสั่งจะมีผลชั่วคราวหรือนำการลบล้างออกเท่านั้น
FORCE_NON_RESIZE_APP
บังคับให้แพ็กเกจที่ใช้การลบล้างไม่สามารถปรับขนาดได้และ เข้าสู่โหมดความเข้ากันได้ของขนาดเมื่อมีการเปลี่ยนแปลงการกำหนดค่า ใช้กับขนาดจอแสดงผลทั้งหมด
วิธีที่แอปจะให้ผลลัพธ์เหมือนกับการลบล้าง
ตั้งค่าทั้งแอตทริบิวต์ 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 ด้วย
วิธีที่แอปจะให้ผลลัพธ์เหมือนกับการลบล้าง
วิธีเพิ่มประสิทธิภาพแอป
วิธีปิดใช้หรือเลือกไม่ใช้การลบล้าง
แฟล็กพร็อพเพอร์ตี้เพื่อปรับการลบล้าง
คำสั่ง 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_SMALL
ตั้งค่าสัดส่วนภาพขั้นต่ำของกิจกรรมเป็นค่าต่ำสุด (4:3)
วิธีที่แอปจะให้ผลลัพธ์เหมือนกับการลบล้าง
วิธีเพิ่มประสิทธิภาพแอป
วิธีปิดใช้หรือเลือกไม่ใช้การลบล้าง
แฟล็กพร็อพเพอร์ตี้เพื่อปรับการลบล้าง
คำสั่ง adb เพื่อทดสอบการลบล้าง
วิธีใช้การลบล้าง
adb shell am compat enable OVERRIDE_MIN_ASPECT_RATIO_SMALL <package>
วิธีนำการลบล้างออก
adb shell am compat disable OVERRIDE_MIN_ASPECT_RATIO_SMALL <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
หรือใช้ API ของ Activity#setRequestedOrientation()
วิธีเพิ่มประสิทธิภาพแอป
แอปของคุณควรรองรับการวางแนวทั้งหมด การเปลี่ยนการวางแนวเป็นการ
เปลี่ยนแปลงการกำหนดค่า ซึ่งจัดการได้ 2 วิธี ได้แก่ การปล่อยให้
ระบบทำลายและสร้างแอปขึ้นใหม่ หรือจัดการการเปลี่ยนแปลงการกำหนดค่า
ด้วยตนเอง หากคุณจัดการการเปลี่ยนแปลงการกำหนดค่าด้วยตนเอง คุณจะคงสถานะแอปไว้ได้โดยใช้ ViewModel ในบางกรณี คุณอาจเลือกที่จะล็อก
การวางแนวบนจอแสดงผลขนาดเล็กเท่านั้นได้ แต่การทำเช่นนี้อาจไม่ปรับขนาดได้ดีเท่ากับการ
อนุญาตให้ผู้ใช้หมุนแอปตามต้องการ ใน Android 12L ขึ้นไป
การกำหนดแนวคงที่สามารถลบล้างได้โดยการกำหนดค่าอุปกรณ์ ดูข้อมูลเพิ่มเติมเกี่ยวกับการจัดการการเปลี่ยนแปลงการกำหนดค่าและการรองรับการวางแนวทั้งหมดได้ที่จัดการการเปลี่ยนแปลงการกำหนดค่า
ภาพรวม ViewModel และการจำกัดการวางแนวแอปในโทรศัพท์แต่ไม่ได้จำกัดในอุปกรณ์หน้าจอขนาดใหญ่
วิธีปิดใช้หรือเลือกไม่ใช้การลบล้าง
ตั้งค่าสถานะพร็อพเพอร์ตี้
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() หรือ
Activity#getRequestedOrientation()
วิธีที่แอปจะให้ผลลัพธ์เหมือนกับการลบล้าง
อย่าตั้งค่าแอตทริบิวต์ไฟล์ Manifest
android:screenOrientationหรือตั้งค่าแอตทริบิวต์เป็น"user"ตั้งค่าแอตทริบิวต์ไฟล์ Manifest
android:resizeableActivityเป็นtrueในหน้าจอขนาดเล็ก หากต้องการรองรับการปรับขนาดแอปขณะปิดใช้โหมดหลายหน้าต่างด้วย
รองรับโหมดหลายหน้าต่างandroid:resizeableActivity=falseให้ตั้งค่าแฟล็กข้อมูลเมตาandroid.supports_size_changesเป็นtrueอย่าตั้งค่าminAspectRatioและmaxAspectRatio
วิธีเพิ่มประสิทธิภาพแอป
เปิดใช้แอปให้รองรับการวางแนวทั้งหมด และอย่าตั้งค่าscreenOrientation
ข้อกำหนดในไฟล์ Manifest ของแอป รองรับการปรับขนาดแอป
โหมดหลายหน้าต่าง และสัดส่วนการแสดงผลทั้งหมดโดยตั้งค่าแอตทริบิวต์ android:resizeableActivity ในไฟล์ Manifest ของแอปเป็น true ดูรองรับขนาดการแสดงผลต่างๆ
วิธีปิดใช้หรือเลือกไม่ใช้การลบล้าง
แฟล็กพร็อพเพอร์ตี้เพื่อปรับการลบล้าง
คำสั่ง 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 ระบบจะใช้การลบล้าง เฉพาะในกรณีที่กิจกรรมไม่ได้ระบุการวางแนวคงที่อื่นๆ
วิธีที่แอปจะให้ผลลัพธ์เหมือนกับการลบล้าง
วิธีเพิ่มประสิทธิภาพแอป
วิธีปิดใช้หรือเลือกไม่ใช้การลบล้าง
แฟล็กพร็อพเพอร์ตี้เพื่อปรับการลบล้าง
คำสั่ง 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
วิธีที่แอปจะให้ผลลัพธ์เหมือนกับการลบล้าง
วิธีเพิ่มประสิทธิภาพแอป
วิธีปิดใช้หรือเลือกไม่ใช้การลบล้าง
แฟล็กพร็อพเพอร์ตี้เพื่อปรับการลบล้าง
คำสั่ง 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
เปิดใช้การวางแนว reverseLandscape สำหรับกิจกรรมทั้งหมดใน แพ็กเกจ ระบบจะใช้การลบล้างก็ต่อเมื่อกิจกรรมไม่ได้ระบุการวางแนวคงที่อื่นๆ เว้นแต่จะเปิดใช้ 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 จะมีผลเมื่อการเชื่อมต่อกล้องทำงานอยู่เท่านั้น
วิธีที่แอปจะให้ผลลัพธ์เหมือนกับการลบล้าง
วิธีเพิ่มประสิทธิภาพแอป
วิธีปิดใช้หรือเลือกไม่ใช้การลบล้าง
แฟล็กพร็อพเพอร์ตี้เพื่อปรับการลบล้าง
คำสั่ง 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 - เปิดใช้การตั้งค่าคำขอการวางแนวที่ผู้ผลิตอุปกรณ์เพิกเฉยสำหรับ จอแสดงผล
- การวางแนวการแสดงผลตามธรรมชาติคือแนวนอน
วิธีที่แอปจะให้ผลลัพธ์เหมือนกับการลบล้าง
ไม่เกี่ยวข้อง คุณควรแก้ปัญหาในตรรกะของแอปพลิเคชัน
วิธีเพิ่มประสิทธิภาพแอป
วิธีปิดใช้หรือเลือกไม่ใช้การลบล้าง
ตั้งค่าสถานะพร็อพเพอร์ตี้
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
วิธีเพิ่มประสิทธิภาพแอป
วิธีปิดใช้หรือเลือกไม่ใช้การลบล้าง
ตั้งค่าสถานะพร็อพเพอร์ตี้
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 วินาที หากกิจกรรมไม่ได้อยู่ในรูปแบบจดหมายสำหรับวางแนวคงที่
วิธีที่แอปจะให้ผลลัพธ์เหมือนกับการลบล้าง
ไม่เกี่ยวข้อง คุณควรแก้ปัญหาในตรรกะของแอปพลิเคชัน
วิธีเพิ่มประสิทธิภาพแอป
วิธีปิดใช้หรือเลือกไม่ใช้การลบล้าง
ตั้งค่าสถานะพร็อพเพอร์ตี้
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
ยกเว้นแพ็กเกจจากลักษณะการทำงานของคำขอไม่สนใจการวางแนวที่ผู้ผลิตอุปกรณ์เปิดใช้ได้สำหรับพื้นที่แสดงผลหรือการแสดงผลทั้งหมด
วิธีที่แอปจะให้ผลลัพธ์เหมือนกับการลบล้าง
ไม่เกี่ยวข้อง คุณควรแก้ปัญหาในตรรกะของแอปพลิเคชัน
วิธีเพิ่มประสิทธิภาพแอป
วิธีปิดใช้หรือเลือกไม่ใช้การลบล้าง
เลือกไม่ใช้ไม่ได้ การปิดใช้การลบล้างอาจเป็นอันตรายหากแอปไม่สามารถใช้งานร่วมกับอุปกรณ์ที่เปิดใช้การตั้งค่าให้ผู้ผลิตอุปกรณ์ไม่สนใจคำขอการวางแนวได้ โปรดติดต่อ Android Developer Relations เพื่อปิดใช้การลบล้าง
แฟล็กพร็อพเพอร์ตี้เพื่อปรับการลบล้าง
ไม่มีการแจ้งว่าพร็อพเพอร์ตี้นี้ไม่เหมาะสมสำหรับการลบล้างนี้
คำสั่ง 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
หรือตั้งค่าสถานะข้อมูลเมตา android.supports_size_changes เป็น true
วิธีเพิ่มประสิทธิภาพแอป
แอปที่ประกาศว่าปรับขนาดได้อย่างเต็มที่ควรไม่พึ่งพาขนาดการแสดงผลเพื่อจัดตำแหน่งองค์ประกอบ UI ย้ายข้อมูลแอปไปยัง API ที่อัปเดตล่าสุดซึ่ง
มีWindowMetrics หากใช้ Jetpack Compose ให้ใช้ประโยชน์จาก API ของ
WindowSizeClass เพื่อวาด UI ตามพื้นที่หน้าจอที่แอปมีในจอแสดงผลปัจจุบัน ดูใช้คลาสขนาดหน้าต่าง
วิธีปิดใช้หรือเลือกไม่ใช้การลบล้าง
เลือกไม่ใช้ไม่ได้ ย้ายข้อมูลจาก API ที่เลิกใช้งานแล้ว
แฟล็กพร็อพเพอร์ตี้เพื่อปรับการลบล้าง
ไม่มีการแจ้งว่าพร็อพเพอร์ตี้นี้ไม่เหมาะสมสำหรับการลบล้างนี้
คำสั่ง adb เพื่อทดสอบการลบล้าง
วิธีใช้การลบล้าง
adb shell am compat enable NEVER_SANDBOX_DISPLAY_APIS <package>
วิธีนำการลบล้างออก
adb shell am compat disable NEVER_SANDBOX_DISPLAY_APIS <package>
หมายเหตุ: คำสั่งจะมีผลชั่วคราวหรือนำการลบล้างออกเท่านั้น
ALWAYS_SANDBOX_DISPLAY_APIS
บังคับให้แพ็กเกจใช้แซนด์บ็อกซ์ Display API เสมอ
ไม่ว่าจะอยู่ในโหมดการแสดงหน้าต่างใดก็ตาม Display API จะระบุขอบเขตของแอปเสมอ
วิธีที่แอปจะให้ผลลัพธ์เหมือนกับการลบล้าง
ประกาศว่ากิจกรรมปรับขนาดไม่ได้โดยตั้งค่าแอตทริบิวต์
android:resizeableActivity เป็น false หรือตั้งค่า
android.supports_size_changesแฟล็กข้อมูลเมตาเป็น false
วิธีเพิ่มประสิทธิภาพแอป
แอปที่ประกาศว่าปรับขนาดได้อย่างเต็มที่ไม่ควรใช้ขนาดการแสดงผลเพื่อ จัดตำแหน่งองค์ประกอบ UI ย้ายข้อมูลแอปจาก API ที่เลิกใช้งานแล้วไปยัง
API ล่าสุดที่ให้ WindowMetrics ดูWindowMetricsCalculator
วิธีปิดใช้หรือเลือกไม่ใช้การลบล้าง
เลือกไม่ใช้ไม่ได้ ย้ายข้อมูลจาก API ที่เลิกใช้งานแล้ว
แฟล็กพร็อพเพอร์ตี้เพื่อปรับการลบล้าง
ไม่มีการแจ้งว่าพร็อพเพอร์ตี้นี้ไม่เหมาะสมสำหรับการลบล้างนี้
คำสั่ง adb เพื่อทดสอบการลบล้าง
วิธีใช้การลบล้าง
adb shell am compat enable ALWAYS_SANDBOX_DISPLAY_APIS <package>
วิธีนำการลบล้างออก
adb shell am compat disable ALWAYS_SANDBOX_DISPLAY_APIS <package>
หมายเหตุ: คำสั่งจะมีผลชั่วคราวหรือนำการลบล้างออกเท่านั้น
OVERRIDE_SANDBOX_VIEW_BOUNDS_APIS
บังคับให้แพ็กเกจแซนด์บ็อกซ์ API View ต่อไปนี้ให้เป็นขอบเขตของกิจกรรม
วิธีที่แอปจะให้ผลลัพธ์เหมือนกับการลบล้าง
แก้ไขปัญหาในโค้ดของแอปพลิเคชันโดยใช้ API ที่ระบุขอบเขตของ หน้าต่างแอปและออฟเซ็ตที่สัมพันธ์กับหน้าต่างแอปแทนที่จะเป็นขอบเขตของ จอแสดงผลของอุปกรณ์และออฟเซ็ตที่สัมพันธ์กับจอแสดงผลของอุปกรณ์
วิธีเพิ่มประสิทธิภาพแอป
แอปควรใช้ View API โดยคำนึงถึงความเป็นไปได้ที่จะเกิดการแสดงภาพแบบกล่องจดหมาย
และโหมดหลายหน้าต่างที่ใช้กับแอป ดูWindowMetricsCalculator
วิธีปิดใช้หรือเลือกไม่ใช้การลบล้าง
ตั้งค่าสถานะพร็อพเพอร์ตี้
PROPERTY_COMPAT_ALLOW_SANDBOXING_VIEW_BOUNDS_APIS
เป็น false
แฟล็กพร็อพเพอร์ตี้เพื่อปรับการลบล้าง
<property android:name="android.window.PROPERTY_COMPAT_ALLOW_SANDBOXING_VIEW_BOUNDS_APIS"
android:value="false"/>
คำสั่ง adb เพื่อทดสอบการลบล้าง
วิธีใช้การลบล้าง
adb shell am compat enable OVERRIDE_SANDBOX_VIEW_BOUNDS_APIS <package>
วิธีนำการลบล้างออก
adb shell am compat disable OVERRIDE_SANDBOX_VIEW_BOUNDS_APIS <package>
หมายเหตุ: คำสั่งจะมีผลชั่วคราวหรือนำการลบล้างออกเท่านั้น
OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION
ปิดใช้การหมุนเวียน ปรับปรุงประสบการณ์ของผู้ใช้ในบางแอป
วิธีที่แอปจะให้ผลลัพธ์เหมือนกับการลบล้าง
ตั้งค่าสถานะพร็อพเพอร์ตี้
PROPERTY_CAMERA_COMPAT_ALLOW_FORCE_ROTATION
เป็น false
วิธีเพิ่มประสิทธิภาพแอป
อย่าใช้การวางแนวเซ็นเซอร์กล้องหรือข้อมูลอุปกรณ์ที่แคชไว้ ดูคำแนะนำเกี่ยวกับความเข้ากันได้ของกล้องได้ที่การเปิดตัวช่องมองภาพของกล้องและรองรับ พื้นผิวที่ปรับขนาดได้ในแอปกล้อง
วิธีปิดใช้หรือเลือกไม่ใช้การลบล้าง
ตั้งค่าสถานะพร็อพเพอร์ตี้
PROPERTY_CAMERA_COMPAT_ALLOW_FORCE_ROTATION
เป็น true
แฟล็กพร็อพเพอร์ตี้เพื่อปรับการลบล้าง
<property android:name="android.window.PROPERTY_CAMERA_COMPAT_ALLOW_FORCE_ROTATION"
android:value="true|false"/>
คำสั่ง adb เพื่อทดสอบการลบล้าง
หากต้องการใช้การลบล้างซึ่งจะนำการหมุนบังคับออก ให้ทำดังนี้
adb shell am compat enable OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION <package>
หากต้องการนำการลบล้างออก ซึ่งจะช่วยให้เกิดการหมุนเวียนแบบบังคับได้ ให้ทำดังนี้
adb shell am compat disable OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION <package>
หมายเหตุ: คำสั่งจะมีผลชั่วคราวหรือนำการลบล้างออกเท่านั้น
OVERRIDE_CAMERA_COMPAT_DISABLE_SIMULATE_REQUESTED_ORIENTATION
ปิดใช้การจำลองการประมวลผลการวางแนวที่ขอสำหรับกล้อง ปรับปรุงประสบการณ์ของผู้ใช้ในบางแอป
วิธีที่แอปจะให้ผลลัพธ์เหมือนกับการลบล้าง
ตั้งค่าสถานะพร็อพเพอร์ตี้
PROPERTY_CAMERA_COMPAT_ALLOW_SIMULATE_REQUESTED_ORIENTATION
เป็น false
วิธีเพิ่มประสิทธิภาพแอป
อย่าใช้การวางแนวเซ็นเซอร์กล้องหรือข้อมูลอุปกรณ์ที่แคชไว้ ดูคำแนะนำเกี่ยวกับความเข้ากันได้ของกล้องได้ที่การเปิดตัวช่องมองภาพของกล้องและรองรับ พื้นผิวที่ปรับขนาดได้ในแอปกล้อง
วิธีปิดใช้หรือเลือกไม่ใช้การลบล้าง
เนื่องจากพร็อพเพอร์ตี้นี้ปิดใช้การประมวลผลความเข้ากันได้ คุณจึงปรับปรุงประสบการณ์ของผู้ใช้ได้โดยพิจารณาการเปลี่ยนแปลงการหมุนจอแสดงผลแบบไดนามิก การวางแนวเซ็นเซอร์ของอุปกรณ์ รวมถึงขนาดหน้าต่างและขนาดตัวอย่าง
แฟล็กพร็อพเพอร์ตี้เพื่อปรับการลบล้าง
<property android:name="android.window.PROPERTY_CAMERA_COMPAT_ALLOW_SIMULATE_REQUESTED_ORIENTATION"
android:value="true|false"/>
คำสั่ง adb เพื่อทดสอบการลบล้าง
หากต้องการใช้การลบล้างซึ่งจะนำการจำลองการวางแนวที่ขอออก ให้ทำดังนี้
adb shell am compat enable OVERRIDE_CAMERA_COMPAT_DISABLE_SIMULATE_REQUESTED_ORIENTATION <package>
หากต้องการนำการลบล้างออก ซึ่งจะช่วยให้จำลองการวางแนวที่ขอได้ ให้ทำดังนี้
adb shell am compat disable OVERRIDE_CAMERA_COMPAT_DISABLE_SIMULATE_REQUESTED_ORIENTATION <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
ป้องกันไม่ให้แอปเลือกไม่ใช้การแชร์หน้าจอเฉพาะแอป (ดูการฉายภาพสื่อ) จะมีการบังคับใช้เมื่อแอปใช้ API
createConfigForDefaultDisplay() ในทางที่ผิดเพื่อบังคับ
การจับภาพแบบเต็มหน้าจอและเป็นอันตรายต่อความเป็นส่วนตัวของผู้ใช้โดยการเปิดเผยเนื้อหา
ของการแจ้งเตือน ซึ่งจะจับภาพแบบเต็มหน้าจอแต่ไม่ใช่การแชร์หน้าจอแอป
และแอปทั้งหมดไม่ว่าจะเป็นโหมดการแสดงหน้าต่างใดก็ตาม
วิธีที่แอปจะให้ผลลัพธ์เหมือนกับการลบล้าง
อนุญาตลักษณะการทำงานของการฉายภาพสื่อเริ่มต้น (ใช้งานใน 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 ขึ้นไป แล้วส่งออกเกมอีกครั้ง เลือกตัวเลือกหน้าต่างที่ปรับขนาดได้ในการตั้งค่าโปรแกรมเล่น 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>
หมายเหตุ: คำสั่งจะมีผลชั่วคราวหรือนำการลบล้างออกเท่านั้น
OVERRIDE_EXCLUDE_CAPTION_INSETS_FROM_APP_BOUNDS
เมื่อเปิดใช้การลบล้าง กิจกรรมจะได้รับการกำหนดค่าที่มี การแทรกแถบคำบรรยายแทนเสียง โดยปกติแล้ว ระบบจะไม่รวมการแทรกแถบคำบรรยายแทนเสียงไว้ในการ กำหนดค่า
วิธีที่แอปจะให้ผลลัพธ์เหมือนกับการลบล้าง
เปิดใช้การแสดงผลแบบไร้ขอบ โปรดดูข้อมูลต่อไปนี้
- เขียน: เกี่ยวกับขอบหน้าต่าง
- มุมมอง: แสดงเนื้อหาแบบเต็มขอบในมุมมอง
- การกำหนดค่า: การเปลี่ยนแปลงลักษณะการทำงาน: แอปที่กำหนดเป้าหมายเป็น Android 15 ขึ้นไป
วิธีเพิ่มประสิทธิภาพแอป
คุณหลีกเลี่ยงปัญหานี้ได้หากแอปเปิดใช้การแสดงผลแบบไร้ขอบ
วิธีปิดใช้หรือเลือกไม่ใช้การลบล้าง
ตั้งค่าสถานะพร็อพเพอร์ตี้
PROPERTY_COMPAT_ALLOW_EXCLUDE_CAPTION_INSETS เป็น
false
แฟล็กพร็อพเพอร์ตี้เพื่อปรับการลบล้าง
<property android:name="android.window.PROPERTY_COMPAT_ALLOW_EXCLUDE_CAPTION_INSETS"
android:value="true|false"/>
คำสั่ง adb เพื่อทดสอบการลบล้าง
วิธีใช้การลบล้าง
adb shell am compat enable OVERRIDE_EXCLUDE_CAPTION_INSETS_FROM_APP_BOUNDS <package>
วิธีนำการลบล้างออก
adb shell am compat disable OVERRIDE_EXCLUDE_CAPTION_INSETS_FROM_APP_BOUNDS <package>
หมายเหตุ: คำสั่งจะมีผลชั่วคราวหรือนำการลบล้างออกเท่านั้น
แหล่งข้อมูลเพิ่มเติม
-
เจ้าของอุปกรณ์เสมือนจริงคือแอปที่เชื่อถือได้หรือมีสิทธิ์ซึ่งจัดการอุปกรณ์เสมือนจริง เจ้าของอุปกรณ์เสมือนจริงสร้างอุปกรณ์เสมือนจริงเพื่อแสดงผลแอป แล้วจึงฉายแอปไปยังอุปกรณ์ระยะไกล เช่น คอมพิวเตอร์ส่วนบุคคล เทคโนโลยีความจริงเสมือน (VR) หรือระบบสาระบันเทิงในรถยนต์ เจ้าของอุปกรณ์เสมือนจริงอยู่ในอุปกรณ์ในพื้นที่ เช่น โทรศัพท์ ↩