นักพัฒนามักพบปัญหาที่ไม่เหมือนใครเมื่อสร้างแอปพลิเคชันสำหรับอุปกรณ์พับได้ โดยเฉพาะอุปกรณ์อย่าง Samsung Trifold หรือ Pixel Fold รุ่นแรก ซึ่งเปิดในรูปแบบแนวนอน (rotation_0 = แนวนอน) ข้อผิดพลาดของนักพัฒนาแอปมีดังนี้
- สมมติฐานเกี่ยวกับการวางแนวของอุปกรณ์ไม่ถูกต้อง
- กรณีการใช้งานที่ถูกมองข้าม
- ไม่สามารถคำนวณใหม่หรือแคชค่าในการเปลี่ยนแปลงการกำหนดค่า
ปัญหาที่เฉพาะเจาะจงเกี่ยวกับอุปกรณ์มีดังนี้
- การวางแนวอุปกรณ์ตามธรรมชาติไม่ตรงกันระหว่างจอแสดงผลด้านนอกและด้านใน (สมมติฐานอิงตาม rotation_0 = แนวตั้ง) ซึ่งทําให้แอปทํางานไม่สําเร็จ เมื่อพับและกาง
- การจัดการการเปลี่ยนแปลงการกำหนดค่าความหนาแน่นที่ไม่ถูกต้องและความหนาแน่นของหน้าจอที่แตกต่างกัน
- ปัญหาการแสดงตัวอย่างจากกล้องถ่ายรูปที่เกิดจากการที่เซ็นเซอร์ตรวจจับผ่านกล้องต้องอาศัยการวางแนวตามธรรมชาติ
หากต้องการมอบประสบการณ์ของผู้ใช้ที่มีคุณภาพสูงในอุปกรณ์แบบพับได้ ให้มุ่งเน้นที่ส่วนสำคัญต่อไปนี้
- กำหนดการวางแนวของแอปตามพื้นที่หน้าจอจริงที่แอปใช้ ไม่ใช่การวางแนวทางกายภาพของอุปกรณ์
- อัปเดตตัวอย่างกล้องเพื่อจัดการการวางแนวอุปกรณ์และสัดส่วนภาพอย่างถูกต้อง หลีกเลี่ยงตัวอย่างที่ตะแคงข้าง และป้องกันไม่ให้รูปภาพยืดหรือถูกครอบตัด
- รักษาความต่อเนื่องของแอปในระหว่างการพับหรือกางอุปกรณ์โดยทำอย่างใดอย่างหนึ่งต่อไปนี้
คงสถานะไว้ด้วย
ViewModelหรือแนวทางที่คล้ายกัน หรือจัดการการเปลี่ยนแปลงความหนาแน่นของหน้าจอและการเปลี่ยนแปลงการวางแนวด้วยตนเอง ซึ่งจะช่วยหลีกเลี่ยงการรีสตาร์ทแอปหรือการสูญเสียสถานะ - สำหรับแอปที่ใช้เซ็นเซอร์ตรวจจับความเคลื่อนไหว ให้ปรับระบบพิกัดให้สอดคล้องกับการวางแนวปัจจุบันของหน้าจอ และหลีกเลี่ยงการคาดการณ์ตาม rotation_0 = แนวตั้ง เพื่อให้มั่นใจว่าการโต้ตอบของผู้ใช้จะแม่นยำ
สร้างแบบปรับอัตโนมัติ
หากแอปของคุณปรับเปลี่ยนตามอุปกรณ์อยู่แล้วและเป็นไปตามระดับที่เพิ่มประสิทธิภาพ (ระดับที่ 2) ที่ระบุไว้ในหลักเกณฑ์ด้านคุณภาพของแอปที่ปรับเปลี่ยนตามอุปกรณ์ แอปควรทำงานได้ดีในอุปกรณ์แบบพับ หรือก่อนที่จะตรวจสอบรายละเอียดเฉพาะ ของอุปกรณ์พับได้แบบ 3 พับและแนวนอนอีกครั้ง โปรดอ่านแนวคิดพื้นฐานต่อไปนี้เกี่ยวกับการพัฒนาแบบปรับได้ของ Android
เลย์เอาต์แบบปรับขนาดได้
UI ต้องรองรับไม่เพียงแค่ขนาดหน้าจอที่แตกต่างกัน แต่ยังต้องรองรับการเปลี่ยนแปลงสัดส่วนภาพแบบเรียลไทม์ด้วย เช่น การกางออกและการเข้าสู่โหมดหลายหน้าต่างหรือโหมดหน้าต่างเดสก์ท็อป ดูคำแนะนำเพิ่มเติมเกี่ยวกับวิธีทำสิ่งต่อไปนี้ได้ที่เกี่ยวกับเลย์เอาต์แบบปรับอัตโนมัติ
- ออกแบบและใช้เลย์เอาต์แบบปรับอัตโนมัติ
- ปรับการนำทางหลักของแอปตามขนาดหน้าต่าง
- ใช้คลาสขนาดหน้าต่างเพื่อปรับ UI ของแอป
- ลดความซับซ้อนในการติดตั้งใช้งานเลย์เอาต์ Canonical เช่น รายการ-รายละเอียด โดยใช้ Jetpack API
คลาสขนาดหน้าต่าง
อุปกรณ์แบบพับได้ ซึ่งรวมถึงอุปกรณ์แบบพับได้แนวนอนและแบบพับ 3 ทบ สามารถเปลี่ยนขนาดหน้าต่างระหว่างคลาสขนาดกะทัดรัด ปานกลาง และขยายได้ทันที การทำความเข้าใจและ การใช้คลาสเหล่านี้จะช่วยให้มั่นใจว่าแอปจะแสดงคอมโพเนนต์การนำทางและ ความหนาแน่นของเนื้อหาที่ถูกต้องสำหรับสถานะอุปกรณ์ปัจจุบัน
ตัวอย่างต่อไปนี้ใช้ไลบรารีการปรับอัตโนมัติของ Material 3 เพื่อกำหนดจำนวนพื้นที่ที่แอปมีอยู่โดยการเรียกใช้ฟังก์ชัน currentWindowAdaptiveInfo() ก่อน จากนั้นใช้เลย์เอาต์ที่เกี่ยวข้องสำหรับคลาสขนาดหน้าต่าง 3 คลาส
val adaptiveInfo = currentWindowAdaptiveInfo()
val windowSizeClass = adaptiveInfo.windowSizeClass
when {
windowSizeClass.isWidthAtLeastBreakpoint(WIDTH_DP_EXPANDED_LOWER_BOUND) -> // Expanded
windowSizeClass.isWidthAtLeastBreakpoint(WIDTH_DP_MEDIUM_LOWER_BOUND) -> // Medium
else -> // Compact
}
ดูข้อมูลเพิ่มเติมได้ที่ใช้คลาสขนาดหน้าต่าง
คุณภาพแอปแบบปรับอัตโนมัติ
การปฏิบัติตามระดับที่ 2 (ปรับให้เหมาะสมแบบปรับได้) หรือระดับที่ 1 (แบบปรับได้ ที่แตกต่าง) ของหลักเกณฑ์ด้านคุณภาพของแอปแบบปรับได้จะช่วยให้แอปของคุณ มอบประสบการณ์การใช้งานที่น่าสนใจบนอุปกรณ์แบบพับ 3 ทบ อุปกรณ์แบบพับได้แนวนอน และอุปกรณ์หน้าจอขนาดใหญ่อื่นๆ หลักเกณฑ์นี้ครอบคลุมการตรวจสอบที่สำคัญใน หลายระดับชั้นเพื่อเปลี่ยนจากประสบการณ์ที่พร้อมใช้งานแบบปรับเปลี่ยนได้ไปเป็นประสบการณ์ที่แตกต่าง
Android 16 ขึ้นไป
สำหรับแอปที่กำหนดเป้าหมายเป็น Android 16 (ระดับ API 36) ขึ้นไป ระบบจะไม่สนใจข้อจำกัดด้านการวางแนว ความสามารถในการปรับขนาด และสัดส่วนภาพในจอแสดงผลที่มีความกว้างที่เล็กที่สุด >= 600dp แอปจะเติมเต็มหน้าต่างแสดงผลทั้งหมด ไม่ว่าอัตราส่วนภาพหรือการวางแนวที่ผู้ใช้ต้องการ และระบบจะไม่ใช้โหมดความเข้ากันได้ของแถบดำอีกต่อไป
สิ่งที่ควรพิจารณาเป็นพิเศษ
โทรศัพท์แบบพับได้ 3 ทบและแบบแนวนอนมีลักษณะการทำงานของฮาร์ดแวร์ที่ไม่เหมือนใคร ซึ่ง ต้องมีการจัดการที่เฉพาะเจาะจง โดยเฉพาะอย่างยิ่งในเรื่องเซ็นเซอร์ ตัวอย่างกล้อง และ ความต่อเนื่องของการกำหนดค่า (รักษาสถานะเมื่อพับ กางออก หรือปรับขนาด)
ตัวอย่างจากกล้อง
ปัญหาที่พบบ่อยในอุปกรณ์พับได้แนวนอนหรือการคำนวณสัดส่วนภาพ (ใน สถานการณ์ต่างๆ เช่น หลายหน้าต่าง การแสดงหน้าต่างเดสก์ท็อป หรือจอแสดงผลที่เชื่อมต่อ) คือเมื่อ พรีวิวของกล้องปรากฏในลักษณะยืดออก ด้านข้าง ครอบตัด หรือหมุน
สมมติฐานที่ไม่ตรงกัน
ปัญหานี้มักเกิดขึ้นในอุปกรณ์หน้าจอขนาดใหญ่และอุปกรณ์พับได้ เนื่องจากแอปอาจสันนิษฐานว่าฟีเจอร์ของกล้อง เช่น สัดส่วนภาพและการวางแนวเซ็นเซอร์ มีความสัมพันธ์กันแบบตายตัวกับฟีเจอร์ของอุปกรณ์ เช่น การวางแนวอุปกรณ์และการวางแนวตามธรรมชาติ
รูปแบบของอุปกรณ์ใหม่ๆ ทำให้สมมติฐานนี้อาจใช้ไม่ได้ อุปกรณ์พับได้สามารถเปลี่ยน ขนาดการแสดงผลและสัดส่วนภาพได้โดยไม่ต้องเปลี่ยนการหมุนอุปกรณ์ เช่น การกางอุปกรณ์จะเปลี่ยนสัดส่วนภาพ แต่หากผู้ใช้ไม่หมุน อุปกรณ์ การหมุนของอุปกรณ์จะยังคงเหมือนเดิม หากแอปคิดว่าสัดส่วนภาพ สัมพันธ์กับการหมุนอุปกรณ์ แอปอาจหมุนหรือปรับขนาดตัวอย่างกล้อง อย่างไม่ถูกต้อง กรณีเดียวกันนี้อาจเกิดขึ้นหากแอปถือว่าการวางแนวเซ็นเซอร์กล้องตรงกับการวางแนวอุปกรณ์แนวตั้ง ซึ่งไม่เป็นความจริงเสมอไปสำหรับอุปกรณ์พับได้แนวนอน
โซลูชันที่ 1: Jetpack CameraX (ดีที่สุด)
โซลูชันที่ง่ายและมีประสิทธิภาพที่สุดคือการใช้ไลบรารี Jetpack CameraX องค์ประกอบ UI ของ PreviewView ได้รับการออกแบบมาเพื่อจัดการความซับซ้อนทั้งหมดของการแสดงตัวอย่าง
โดยอัตโนมัติ
PreviewViewปรับการวางแนวเซ็นเซอร์ การหมุนอุปกรณ์ และ การปรับขนาดได้อย่างถูกต้อง- โดยจะรักษาสัดส่วนภาพของรูปภาพจากกล้อง ซึ่งมักจะทำโดยการจัดกึ่งกลาง และครอบตัด (FILL_CENTER)
- คุณตั้งค่าประเภทการปรับขนาดเป็น
FIT_CENTERเพื่อใส่แถบดำด้านบนและด้านล่างของตัวอย่างได้หากจำเป็น
ดูข้อมูลเพิ่มเติมได้ที่ใช้งานตัวอย่างในเอกสารประกอบของ CameraX
วิธีที่ 2: CameraViewfinder
หากคุณใช้ฐานของโค้ด Camera2 ที่มีอยู่ CameraViewfinder library
(เข้ากันได้แบบย้อนหลังกับระดับ API 21) เป็นอีกหนึ่งโซลูชันที่ทันสมัย ซึ่งช่วยให้การแสดงฟีดกล้องเป็นเรื่องง่ายด้วยการใช้ TextureView หรือ SurfaceView และ
ใช้การเปลี่ยนรูปแบบที่จำเป็นทั้งหมด (สัดส่วนภาพ ขนาด และการหมุน)
ให้คุณ
ดูข้อมูลเพิ่มเติมได้ที่บล็อกโพสต์เปิดตัวช่องมองภาพของกล้องและคู่มือนักพัฒนาซอฟต์แวร์ตัวอย่างกล้อง
โซลูชันที่ 3: การใช้งาน Camera2 ด้วยตนเอง
หากใช้ CameraX หรือ CameraViewfinder ไม่ได้ คุณต้องคำนวณ
การวางแนวและสัดส่วนภาพด้วยตนเอง และตรวจสอบว่าได้อัปเดตการคำนวณทุกครั้งที่มีการเปลี่ยนแปลงการกำหนดค่า
- รับการวางแนวเซ็นเซอร์กล้อง (เช่น 0, 90, 180, 270 องศา)
จาก
CameraCharacteristics - รับการหมุนจอแสดงผลปัจจุบันของอุปกรณ์ (เช่น 0, 90, 180, 270 องศา)
- ใช้ค่าทั้ง 2 นี้เพื่อพิจารณาการเปลี่ยนรูปแบบที่จำเป็นสำหรับ
SurfaceViewหรือTextureView - ตรวจสอบว่าสัดส่วนภาพของเอาต์พุต
Surfaceตรงกับสัดส่วนภาพของตัวอย่างกล้องเพื่อป้องกันไม่ให้ภาพบิดเบี้ยว - แอปกล้องอาจทำงานในส่วนหนึ่งของหน้าจอ ไม่ว่าจะอยู่ในโหมด หลายหน้าต่างหรือการแสดงหน้าต่างเดสก์ท็อป หรือบนจอแสดงผลที่เชื่อมต่อ ด้วยเหตุนี้ จึงไม่ควรใช้ขนาดหน้าจอเพื่อกำหนดขนาดของ ช่องมองภาพของกล้อง แต่ให้ใช้เมตริกหน้าต่างแทน
ดูข้อมูลเพิ่มเติมได้ที่คู่มือนักพัฒนาซอฟต์แวร์ตัวอย่างกล้องและวิดีโอแอปกล้อง ในอุปกรณ์รูปแบบต่างๆ
วิธีที่ 4: ดำเนินการพื้นฐานของกล้องโดยใช้ Intent
หากไม่ต้องการฟีเจอร์กล้องมากมาย โซลูชันที่ตรงไปตรงมาคือการดำเนินการ พื้นฐานของกล้อง เช่น การถ่ายภาพหรือวิดีโอโดยใช้แอปพลิเคชันกล้องเริ่มต้นของอุปกรณ์ คุณไม่จำเป็นต้องผสานรวมกับคลังกล้อง แต่ให้ใช้ Intent แทน
ดูข้อมูลเพิ่มเติมได้ที่เจตนาของกล้อง
การกำหนดค่าและความต่อเนื่อง
อุปกรณ์แบบพับได้ช่วยเพิ่มความอเนกประสงค์ของ UI แต่ก็อาจทำให้ต้องมีการเปลี่ยนแปลงการกำหนดค่ามากกว่าอุปกรณ์แบบพับไม่ได้ แอปของคุณต้องจัดการการเปลี่ยนแปลงการกำหนดค่าเหล่านี้และ การรวมกัน เช่น การหมุนอุปกรณ์ การพับ/กางออก และการปรับขนาดหน้าต่าง ในโหมดหลายหน้าต่างหรือเดสก์ท็อป ขณะที่ยังคงหรือกู้คืนสถานะแอป เช่น แอปต้องรักษาความต่อเนื่องต่อไปนี้
- สถานะของแอปโดยไม่ขัดข้องหรือทําให้เกิดการเปลี่ยนแปลงที่รบกวนผู้ใช้ (เช่น เมื่อเปลี่ยนหน้าจอหรือส่งแอปไปไว้เบื้องหลัง)
- ตำแหน่งการเลื่อนของฟิลด์ที่เลื่อนได้
- ข้อความที่พิมพ์ลงในช่องข้อความและสถานะแป้นพิมพ์
- ตำแหน่งการเล่นสื่อเพื่อให้เล่นต่อจากจุดที่หยุดไว้เมื่อเริ่มการเปลี่ยนแปลงการกำหนดค่า
การเปลี่ยนแปลงการกำหนดค่าที่ทริกเกอร์บ่อยๆ ได้แก่ screenSize,
smallestScreenSize, screenLayout, orientation, density, fontScale,
touchscreen และ keyboard
ดูandroid:configChanges และจัดการการเปลี่ยนแปลงการกำหนดค่า ดูข้อมูลเพิ่มเติมเกี่ยวกับการจัดการสถานะแอปได้ที่บันทึกสถานะ UI
การเปลี่ยนแปลงการกำหนดค่าความหนาแน่น
หน้าจอด้านนอกและด้านในของอุปกรณ์พับได้แบบ 3 พับและอุปกรณ์พับได้แนวนอนอาจมีความหนาแน่นของพิกเซลแตกต่างกัน
ดังนั้น การจัดการการเปลี่ยนแปลงการกำหนดค่า
สำหรับ density จึงต้องให้ความสนใจเป็นพิเศษ โดยปกติแล้ว Android จะรีสตาร์ทกิจกรรม
เมื่อความหนาแน่นของจอแสดงผลเปลี่ยนแปลง ซึ่งอาจทำให้ข้อมูลสูญหาย หากไม่ต้องการให้ระบบ
รีสตาร์ทกิจกรรม ให้ประกาศการจัดการความหนาแน่นใน Manifest และ
จัดการการเปลี่ยนแปลงการกำหนดค่าโดยใช้โปรแกรมในแอป
การกำหนดค่า AndroidManifest.xml
density: ประกาศว่าแอปจะจัดการการเปลี่ยนแปลงความหนาแน่นของหน้าจอ- การเปลี่ยนแปลงการกำหนดค่าอื่นๆ: คุณควรประกาศการเปลี่ยนแปลงการกำหนดค่าอื่นๆ ที่เกิดขึ้นบ่อยด้วย เช่น
screenSize,orientation,keyboardHidden,fontScaleและอื่นๆ
การประกาศความหนาแน่น (และการเปลี่ยนแปลงการกำหนดค่าอื่นๆ) จะป้องกันไม่ให้ระบบรีสตาร์ท กิจกรรม แต่จะเรียกใช้ onConfigurationChanged() แทน
การติดตั้งใช้งาน onConfigurationChanged()
เมื่อความหนาแน่นเปลี่ยนแปลง คุณต้องอัปเดตทรัพยากร (เช่น โหลดบิตแมปซ้ำหรือคำนวณขนาดเลย์เอาต์ใหม่) ในการเรียกกลับ
- ตรวจสอบว่า DPI เปลี่ยนเป็น
newConfig.densityDpiแล้ว - รีเซ็ตมุมมองที่กำหนดเอง Drawable ที่กำหนดเอง และอื่นๆ เป็นความหนาแน่นใหม่
รายการทรัพยากรที่จะประมวลผล
- แหล่งข้อมูลรูปภาพ: แทนที่บิตแมปและ Drawable ด้วยแหล่งข้อมูลเฉพาะความหนาแน่น หรือปรับขนาดโดยตรง
- หน่วยเลย์เอาต์ (การแปลง dp เป็น px): คำนวณขนาดมุมมอง ขอบ ระยะห่างภายในใหม่
- ขนาดแบบอักษรและข้อความ: ใช้ขนาดข้อความหน่วย sp อีกครั้ง
- การวาด
View/Canvasที่กำหนดเอง: อัปเดตค่าที่อิงตามพิกเซลที่ใช้ในการวาดCanvas
การกำหนดการวางแนวแอป
อย่าใช้การหมุนอุปกรณ์จริงเมื่อสร้างแอปที่ปรับเปลี่ยนตามอุปกรณ์ เนื่องจากระบบจะไม่สนใจการหมุนในอุปกรณ์หน้าจอขนาดใหญ่ และแอปในโหมดหลายหน้าต่างอาจมีการวางแนวที่แตกต่างจากอุปกรณ์ แต่ให้ใช้ Configuration.orientation หรือ WindowMetrics เพื่อระบุว่าแอปของคุณอยู่ในแนวนอนหรือแนวตั้งในขณะนี้โดยอิงตามขนาดหน้าต่าง
วิธีที่ 1: ใช้ Configuration.orientation
พร็อพเพอร์ตี้นี้ระบุการวางแนวที่แอปของคุณแสดงอยู่ ในปัจจุบัน
วิธีที่ 2: ใช้ WindowMetrics#getBounds()
คุณสามารถรับขอบเขตการแสดงผลปัจจุบันของแอปและตรวจสอบความกว้างและความสูงเพื่อกำหนดการวางแนวได้
หากต้องการจำกัดการวางแนวแอปในโทรศัพท์ (หรือหน้าจอด้านนอกของ อุปกรณ์พับได้) แต่ไม่จำกัดในอุปกรณ์ที่มีหน้าจอขนาดใหญ่ โปรดดูจำกัดการวางแนวแอปใน โทรศัพท์
ท่าทางและโหมดการแสดงผล
ท่าทางและสถานะของอุปกรณ์แบบพับได้ เช่น วางบนโต๊ะและHALF_OPENED รองรับทั้งอุปกรณ์แบบพับได้แนวตั้งและแนวนอน อย่างไรก็ตาม โทรศัพท์แบบพับสามทบไม่รองรับท่าทางบนโต๊ะและใช้ไม่ได้HALF_OPENED ในขณะที่ Trifold มีหน้าจอที่ใหญ่กว่าเพื่อมอบประสบการณ์การใช้งานที่ไม่เหมือนใครเมื่อกางออกจนสุด
หากต้องการสร้างความแตกต่างให้กับแอปในอุปกรณ์พับได้ที่รองรับ HALF_OPENED ให้ใช้ Jetpack
WindowManager API เช่น FoldingFeature
ดูข้อมูลเพิ่มเติมเกี่ยวกับท่าทาง สถานะ และการรองรับการแสดงตัวอย่างกล้องในอุปกรณ์พับได้ได้ในคำแนะนำสำหรับนักพัฒนาแอปต่อไปนี้
อุปกรณ์แบบพับได้มอบประสบการณ์การรับชมที่ไม่เหมือนใคร โหมดจอแสดงผลด้านหลังและโหมด 2 หน้าจอช่วยให้คุณสร้างฟีเจอร์การแสดงผลพิเศษสำหรับอุปกรณ์แบบพับได้ เช่น การแสดงตัวอย่างเซลฟีด้วยกล้องหลัง และการแสดงผลที่แตกต่างกันพร้อมกันบนหน้าจอด้านในและด้านนอก ดูข้อมูลเพิ่มเติมได้ที่
ล็อกการวางแนวเป็นแนวเซ็นเซอร์ธรรมชาติ
สำหรับกรณีการใช้งานที่เฉพาะเจาะจงมาก โดยเฉพาะอย่างยิ่ง แอปที่ต้องใช้ทั้งหน้าจอโดยไม่เกี่ยวข้องกับสถานะการพับของอุปกรณ์ ฟีเจอร์แฟล็ก nosensor จะช่วยให้คุณล็อกแอปให้อยู่ในแนวนอนตามธรรมชาติของอุปกรณ์ได้ ตัวอย่างเช่น ใน Pixel
Fold เมื่อพับอุปกรณ์ การวางแนวที่เป็นค่าเริ่มต้นคือแนวตั้ง ส่วนเมื่อกางออก การวางแนวที่เป็นค่าเริ่มต้นคือแนวนอน การเพิ่มแฟล็ก nosensor จะบังคับให้แอปถูกล็อกเป็นแนวตั้งเมื่อทำงานบนจอแสดงผลด้านนอก และล็อกเป็นแนวนอนเมื่อทำงานบนหน้าจอด้านใน
<activity
android:name=".MainActivity"
android:screenOrientation="nosensor">
การรีแมปเซ็นเซอร์ XR และเกม
สำหรับเกมและแอป XR ระบบจะให้ข้อมูลเซ็นเซอร์ดิบ (เช่น ไจโรสโคปหรือตัวตรวจวัดความเร่ง) ในระบบพิกัดที่แก้ไขแล้วของอุปกรณ์ หากผู้ใช้หมุนอุปกรณ์ เพื่อเล่นเกมในแนวนอน แกนเซ็นเซอร์จะไม่หมุนตามหน้าจอ ซึ่งทำให้ควบคุมเกมได้ไม่ถูกต้อง
หากต้องการแก้ไขปัญหานี้ ให้ตรวจสอบ Display.getRotation() ปัจจุบันและแมปแกนใหม่ตามนั้น
- การหมุน 0: x=x, y=y
- หมุน 90: x=-y, y=x
- หมุน 180: x=-x, y=-y
- หมุน 270: x=y, y=-x
สำหรับเวกเตอร์การหมุน (ใช้ในแอปเข็มทิศหรือ XR) ให้ใช้ SensorManager.remapCoordinateSystem() เพื่อแมปทิศทางเลนส์กล้องหรือด้านบนของหน้าจอไปยังแกนใหม่ตามการหมุนปัจจุบัน
ความเข้ากันได้ของแอป
แอปพลิเคชันต้องเป็นไปตามหลักเกณฑ์ด้านคุณภาพของแอปเพื่อให้มั่นใจถึงความเข้ากันได้ ในทุกรูปแบบและจอแสดงผลที่เชื่อมต่อ หากแอปพลิเคชันไม่เป็นไปตาม หลักเกณฑ์ ผู้ผลิตอุปกรณ์สามารถใช้การจัดการ ความเข้ากันได้ แม้ว่าการดำเนินการนี้อาจลดประสบการณ์ของผู้ใช้ก็ตาม
ดูข้อมูลเพิ่มเติมได้ในรายการวิธีแก้ปัญหา ความเข้ากันได้แบบครอบคลุมที่ระบุไว้ในแพลตฟอร์ม โดยเฉพาะอย่างยิ่งรายการที่เกี่ยวข้องกับตัวอย่าง กล้อง การลบล้าง และการเปลี่ยนแปลง API ของ Android 16 ที่อาจ เปลี่ยนลักษณะการทำงานของแอป
ดูข้อมูลเพิ่มเติมเกี่ยวกับการสร้างแอปแบบปรับอัตโนมัติได้ที่หลักเกณฑ์ด้านคุณภาพของแอปแบบปรับอัตโนมัติ