แอปแบบปรับได้รองรับจอแสดงผลทุกขนาด ได้แก่ หน้าจออุปกรณ์ทั้งหมด หน้าต่างที่ปรับขนาดได้ในโหมดหลายหน้าต่าง การวางแนวตั้งและแนวนอน จอแสดงผลที่พับและกางออกของอุปกรณ์แบบพับได้
การตั้งค่าการกำหนดค่าและ API แบบย่อช่วยให้คุณสร้างแอปที่ปรับเปลี่ยนได้ แต่การตั้งค่าและ API ที่ล้าสมัยบางอย่างใช้กับแอปที่ปรับเปลี่ยนตามอุปกรณ์ไม่ได้ และควรหลีกเลี่ยง
การปรับขนาดได้
แอปแบบปรับอัตโนมัติรองรับการปรับขนาดแอปและโหมดหลายหน้าต่าง
แอตทริบิวต์ resizeableActivity ขององค์ประกอบไฟล์ Manifest <activity> และ
<application> จะเปิดหรือปิดใช้โหมดหลายหน้าต่าง
ใน Android 11 (ระดับ API 30) และต่ำกว่า ใน Android 12 (ระดับ API 31) ขึ้นไป หน้าจอขนาดใหญ่จะรองรับโหมดหลายหน้าต่างโดยไม่คำนึงถึงแอตทริบิวต์ ดูข้อมูลเพิ่มเติมได้ที่รองรับโหมดหลายหน้าต่าง
เปิดใช้แอปให้เข้าร่วมในสถานการณ์การทำงานแบบหลายหน้าต่างและการทำงานแบบมัลติทาสก์เพื่อเพิ่มประสิทธิภาพและความพึงพอใจของผู้ใช้
ตั้งค่า resizeableActivity="true" หากแอปกำหนดเป้าหมายเป็น API ระดับต่ำกว่า 24
มิฉะนั้นก็ไม่ต้องสนใจ เนื่องจากค่าเริ่มต้นจะเป็น true ใน Android 7.0 (API
ระดับ 24) ขึ้นไป
อย่าตั้งค่า resizeableActivity="false" สำหรับ API ระดับใดก็ตาม อย่ายกเว้นแอปของคุณ
จากกรณีการใช้งานที่เกี่ยวข้องกับโหมดหลายหน้าต่าง
การวางแนว
แอปที่ปรับเปลี่ยนตามอุปกรณ์จะรองรับการวางแนวตั้งและแนวนอนโดยไม่คำนึงถึงขนาดจอแสดงผลหรือโหมดการแสดงหน้าต่าง
การตั้งค่าไฟล์ Manifest ของ screenOrientation จะจำกัดการวางแนวของกิจกรรม
นำการตั้งค่า screenOrientation ออกจากไฟล์ Manifest ของแอป
การล็อกการวางแนวของแอปไม่ได้ป้องกันการเปลี่ยนแปลงขนาดหน้าต่าง แอปจะ
เปลี่ยนขนาดเมื่อเข้าสู่โหมดหลายหน้าต่าง เมื่อพับหรือกางอุปกรณ์
หรือเมื่อเปลี่ยนขนาดหน้าต่างประเภทเดสก์ท็อป แอปของคุณต้องรองรับการเปลี่ยนแปลง
ขนาดหน้าต่างไม่ว่าคุณจะตั้งค่าแอตทริบิวต์ screenOrientation อย่างไรก็ตาม
อย่าจำกัดการวางแนวของกิจกรรม แอปที่ล็อกการวางแนวจะแสดงเป็นแถบดำด้านบนและด้านล่างในอุปกรณ์หน้าจอขนาดใหญ่และขนาดหน้าต่างที่ไม่รองรับ
แอปที่แสดงแบบ Letterbox จะมีการค้นพบได้ลดลงใน Google Play สำหรับแท็บเล็ต อุปกรณ์พับได้ และอุปกรณ์ ChromeOS
สัดส่วนภาพ
เนื่องจากขนาดหน้าจอและหน้าต่างแตกต่างกัน สัดส่วนภาพจึงแตกต่างกันด้วย ตั้งแต่สูงและแคบ ไปจนถึงสี่เหลี่ยมจัตุรัส ไปจนถึงสั้นและกว้าง
การตั้งค่าไฟล์ Manifest ของ minAspectRatio และ maxAspectRatio จะจำกัด
สัดส่วนภาพของแอปให้เป็นค่าที่ฮาร์ดโค้ด
ปรับแอปให้พอดีกับจอแสดงผลโดยไม่คำนึงถึงขนาดที่สัมพันธ์กัน
นำการตั้งค่า minAspectRatio และ maxAspectRatio ออกจากไฟล์ Manifest ของแอป หรือตรวจสอบว่าแอปปรับขนาดได้ และสัดส่วนการแสดงผลจะจัดการตัวเอง (ดูส่วนการปรับขนาดได้)
อย่าพยายามควบคุมขนาดสัมพัทธ์ของแอป หากแอปทำงานบนหน้าจอหรือในหน้าต่างที่มีสัดส่วนการแสดงผลไม่เข้ากันกับสัดส่วนการแสดงผลของแอป แอปจะแสดงเป็นแถบดำด้านบนและด้านล่าง
ใน Android 14 (ระดับ API 34) ขึ้นไป ผู้ใช้สามารถลบล้างสัดส่วนภาพของแอป เพื่อขยายแอปที่มีแถบดำด้านบนและด้านล่างให้เต็มพื้นที่แสดงผลที่มีอยู่ได้ ดูโหมดความเข้ากันได้ของอุปกรณ์
ขนาดหน้าต่าง
การเพิ่มประสิทธิภาพเลย์เอาต์สำหรับขนาดการแสดงผลต่างๆ เป็นสมมติฐานหลักของ การออกแบบที่ปรับเปลี่ยนตามอุปกรณ์ แอปแบบปรับได้จะเน้นที่ขนาดหน้าต่างแอปมากกว่าขนาดหน้าจอของอุปกรณ์ เมื่อแอปแสดงเต็มหน้าจอ หน้าต่างแอปจะเป็นหน้าจออุปกรณ์
คลาสขนาดหน้าต่างเป็นวิธีที่เป็นระบบในการกำหนดและจัดหมวดหมู่ ขนาดของหน้าต่างแอป ปรับแอปโดยเปลี่ยนเลย์เอาต์เมื่อคลาสขนาดหน้าต่างของแอปมีการเปลี่ยนแปลง
ประเมินขนาดหน้าต่างแอปตามคลาสขนาดหน้าต่าง
หากต้องการกำหนดคลาสขนาดหน้าต่าง ให้ใช้ฟังก์ชันระดับบนสุดของไลบรารี Compose Material 3 Adaptive currentWindowAdaptiveInfo() ดูข้อมูลเพิ่มเติมได้ที่สร้างแอปที่ปรับเปลี่ยนตามอุปกรณ์
อย่าละเลยประโยชน์ของคำจำกัดความของคลาสขนาดหน้าต่างและ API ในตัว อย่าใช้ API ที่เลิกใช้งานแล้วในการคำนวณขนาดหน้าต่าง
API ที่เลิกใช้งานแล้ว
API ของแพลตฟอร์มรุ่นเก่าจะวัดหน้าต่างแอปไม่ถูกต้อง โดยบาง API จะวัดหน้าจออุปกรณ์และบาง API จะไม่รวมการตกแต่งระบบ
ใช้ WindowManager#getCurrentWindowMetrics() และ
WindowMetrics#getBounds() เพื่อรับขนาดของหน้าต่างแอป ใช้
WindowMetrics#getDensity() เพื่อรับความหนาแน่นของการแสดงผล
อย่าใช้ API Display ที่เลิกใช้งานแล้วต่อไปนี้เพื่อกำหนดขนาดหน้าต่าง
getSize(): เลิกใช้งานใน Android 11 (ระดับ API 30)getMetrics(): เลิกใช้งานใน Android 11 (ระดับ API 30)getRealSize(): เลิกใช้งานใน Android 12 (ระดับ API 31)getRealMetrics(): เลิกใช้งานใน Android 12 (ระดับ API 31)
เขียน
Jetpack Compose ออกแบบมาเพื่อการพัฒนา UI แบบปรับอัตโนมัติ ไม่มี XML, ไม่มีไฟล์เลย์เอาต์
ไม่มีตัวระบุทรัพยากร มีเพียง Composable ที่ไม่เก็บสถานะซึ่งอิงตาม Kotlin เช่น Column, Row และ Box ที่อธิบาย UI และตัวปรับแต่ง เช่น offset, padding และ size ที่เพิ่มลักษณะการทำงานให้กับองค์ประกอบ UI
สร้างด้วย Compose ติดตามฟีเจอร์และการเปิดตัวล่าสุด
อย่าพึ่งพาเทคโนโลยีที่ล้าสมัย อย่าปล่อยให้แอปของคุณล้าสมัย
ไลบรารี Compose Material 3 Adaptive
ไลบรารี Compose Material 3 Adaptive มีคอมโพเนนต์และ API ที่ช่วยให้พัฒนาแอปแบบปรับอัตโนมัติได้ง่ายขึ้น
ใช้ API ต่อไปนี้เพื่อให้แอปปรับเปลี่ยนตามอุปกรณ์ได้
NavigationSuiteScaffold: สลับระหว่างแถบนำทางกับแถบข้างสำหรับไปยังส่วนต่างๆ โดยขึ้นอยู่กับคลาสขนาดหน้าต่างของแอปListDetailPaneScaffold: ใช้เลย์เอาต์ Canonical แบบรายละเอียดรายการ ปรับเลย์เอาต์ให้เข้ากับขนาดหน้าต่างแอปSupportingPaneScaffold: ใช้เลย์เอาต์ Canonical ของแผงสนับสนุน
อย่าทำอะไรซ้ำๆ อย่าพลาดโอกาสในการเพิ่มประสิทธิภาพการทำงานของนักพัฒนาแอป ที่ไลบรารี Jetpack Compose ทั้งหมดมอบให้
เลย์เอาต์
ผู้ใช้คาดหวังว่าแอปจะใช้พื้นที่แสดงผลที่มีอยู่ให้เกิดประโยชน์สูงสุดด้วยเนื้อหาส่วนเสริมหรือการควบคุมที่ดียิ่งขึ้น
แอปที่ปรับเปลี่ยนตามอุปกรณ์จะเพิ่มประสิทธิภาพเลย์เอาต์ตามการเปลี่ยนแปลงในจอแสดงผล โดยเฉพาะอย่างยิ่ง การเปลี่ยนแปลงขนาดของหน้าต่างแอปหรือการเปลี่ยนแปลงท่าทางของอุปกรณ์
เปลี่ยนคอมโพเนนต์ UI เมื่อขนาดหน้าต่างเปลี่ยนไปเพื่อใช้ประโยชน์จากพื้นที่แสดงผลที่มี เช่น สลับแถบนำทางด้านล่างที่ใช้ในขนาดหน้าต่างแบบกะทัดรัด เป็นแถบข้างนำทางแนวตั้งในหน้าต่างขนาดกลางและขยาย จัดตำแหน่งกล่องโต้ตอบใหม่เพื่อให้เข้าถึงได้ในจอแสดงผลทั้งหมด
จัดระเบียบคอนเทนต์เป็นบานหน้าต่างเพื่อเปิดใช้เลย์เอาต์แบบหลายบานหน้าต่าง เช่น รายการ-รายละเอียดและบานหน้าต่างสนับสนุนสำหรับการแสดงเนื้อหาแบบไดนามิก
หากไม่ได้ใช้บานหน้าต่างเนื้อหา อย่าเพียงแค่ขยายองค์ประกอบ UI เพื่อเติมเต็มพื้นที่แสดงผลที่มีอยู่
ข้อความบรรทัดยาวอ่านยาก ปุ่มที่ยืดออก
ดูเหมือนออกแบบมาไม่ดี หากใช้ Modifier.fillMaxWidth อย่า
คิดว่าลักษณะการทำงานดังกล่าวเหมาะกับขนาดการแสดงผลทั้งหมด
อุปกรณ์อินพุต
ผู้ใช้ไม่ได้ใช้หน้าจอสัมผัสเพื่อโต้ตอบกับแอปเท่านั้น
แอปแบบปรับได้รองรับคีย์บอร์ด เมาส์ และสไตลัสภายนอกเพื่อมอบ ประสบการณ์ของผู้ใช้ที่ดียิ่งขึ้น และช่วยให้ผู้ใช้ทำงานได้อย่างมีประสิทธิภาพมากขึ้นในรูปแบบ ทุกประเภท
ใช้ประโยชน์จากฟังก์ชันการทำงานในตัวของเฟรมเวิร์ก Android สำหรับ การไปยังแท็บด้วยแป้นพิมพ์ รวมถึงการคลิก เลือก และเลื่อนด้วยเมาส์หรือแทร็กแพด เผยแพร่แป้นพิมพ์ลัดของแอปในเครื่องมือช่วยเหลือแป้นพิมพ์ลัด
ใช้ไลบรารี Material 3 ของ Jetpack เพื่อให้ผู้ใช้เขียนลงในคอมโพเนนต์
TextField ใดก็ได้โดยใช้สไตลัส
อย่าทำให้วิธีการป้อนข้อมูลอื่นเป็นไปไม่ได้ อย่าทำให้เกิดปัญหาด้านการช่วยเหลือพิเศษ
สรุป
- สร้างแอปด้วย Compose และไลบรารี Material 3 Adaptive
- อิงเลย์เอาต์พื้นฐานตามคลาสขนาดหน้าต่าง
- สร้างเลย์เอาต์หลายบานหน้าต่าง
- ทำให้แอปปรับขนาดได้
- ไม่ล็อกการวางแนวของกิจกรรม
- อย่าจำกัดสัดส่วนภาพ
- รองรับการป้อนข้อมูลอื่นๆ นอกเหนือจากการสัมผัส
- หลีกเลี่ยงการใช้ API ที่เลิกใช้งานแล้ว
✓ ทำตามที่ผู้ใช้คาดหวัง เพิ่มประสิทธิภาพแอปให้เหมาะกับอุปกรณ์ที่หลากหลายซึ่งผู้คนใช้ในชีวิตประจำวัน
✗ อย่ารอ เริ่มใช้งานเลยวันนี้