รองรับจอแสดงผลที่เชื่อมต่อ

จอแสดงผลที่เชื่อมต่อจะขยายประสบการณ์การใช้งานหน้าต่างเดสก์ท็อปไปยังโทรศัพท์มาตรฐาน ซึ่งช่วยให้ผู้ใช้เข้าถึงหน้าจอขนาดใหญ่จากอุปกรณ์เคลื่อนที่ได้ ความสามารถนี้เปิดโอกาสใหม่ๆ สำหรับการโต้ตอบของแอปและประสิทธิภาพของผู้ใช้

ฟีเจอร์เฉพาะทั้งหมดของหน้าต่างเดสก์ท็อปจะใช้กับจอแสดงผลที่เชื่อมต่อ เมื่อเชื่อมต่อโทรศัพท์กับจอแสดงผล สถานะของโทรศัพท์จะยังคงเดิม และเซสชันเดสก์ท็อปเปล่าจะเริ่มขึ้นในจอแสดงผลที่เชื่อมต่อ อุปกรณ์และจอแสดงผลจะทํางานเป็น 2 ระบบแยกกัน โดยมีแอปเฉพาะสำหรับจอแสดงผลแต่ละจอ

รูปที่ 1 โทรศัพท์เชื่อมต่อกับจอแสดงผลภายนอก โดยมีเซสชันเดสก์ท็อปบนจอแสดงผลขณะที่โทรศัพท์ยังคงรักษาสถานะของตนเอง

หากคุณเชื่อมต่ออุปกรณ์ที่เปิดใช้หน้าต่างเดสก์ท็อป เช่น แท็บเล็ต กับจอภาพภายนอก เซสชันเดสก์ท็อปจะขยายไปยังทั้ง 2 จอแสดงผล จากนั้นจอแสดงผลทั้ง 2 จอจะทำงานเป็นระบบต่อเนื่องระบบเดียว การตั้งค่านี้ช่วยให้หน้าต่าง เนื้อหา และเคอร์เซอร์ย้ายไปมาได้อย่างอิสระระหว่างจอแสดงผล 2 จอ

รูปที่ 2 แท็บเล็ตที่เชื่อมต่อกับจอภาพภายนอก ซึ่งขยายเซสชันเดสก์ท็อปไปยังทั้ง 2 จอแสดงผล

การรองรับจอแสดงผลที่เชื่อมต่ออย่างมีประสิทธิภาพต้องคำนึงถึงการออกแบบและการใช้งานแอปในหลายๆ ด้าน แนวทางปฏิบัติแนะนำต่อไปนี้จะช่วยให้ผู้ใช้ได้รับประสบการณ์การใช้งานที่ราบรื่นและมีประสิทธิภาพ

จัดการการเปลี่ยนแปลงการแสดงผลแบบไดนามิก

แอปจำนวนมากสร้างขึ้นโดยสมมติว่าออบเจ็กต์ Display และลักษณะของออบเจ็กต์จะไม่เปลี่ยนแปลงตลอดอายุของแอป อย่างไรก็ตาม เมื่อผู้ใช้เชื่อมต่อหรือยกเลิกการเชื่อมต่อจอภาพภายนอก หรือแม้แต่ย้ายหน้าต่างแอประหว่างจอแสดงผล ออบเจ็กต์ Display ที่อยู่เบื้องหลังซึ่งเชื่อมโยงกับบริบทหรือหน้าต่างของแอปอาจเปลี่ยนแปลงได้ พร็อพเพอร์ตี้ของจอแสดงผล เช่น ขนาด ความละเอียด อัตราการรีเฟรช การรองรับ HDR และความหนาแน่น อาจแตกต่างกันไป เช่น หากคุณกำหนดค่าแบบฮาร์ดโค้ดตามหน้าจอของโทรศัพท์ เลย์เอาต์มีแนวโน้มที่จะแสดงไม่ถูกต้องในจอแสดงผลภายนอก

จอแสดงผลภายนอกอาจมีความหนาแน่นของพิกเซลแตกต่างกันอย่างมาก คุณต้องตรวจสอบว่าแอปตอบสนองต่อการเปลี่ยนแปลงความหนาแน่นอย่างถูกต้อง ซึ่งรวมถึงการใช้ความหนาแน่นของพิกเซลอิสระ (dp) สำหรับเลย์เอาต์ การจัดหาทรัพยากรตามความหนาแน่น และตรวจสอบว่า UI ปรับขนาดอย่างเหมาะสม

ใช้บริบทที่เหมาะสม

การใช้บริบทที่เหมาะสมเป็นสิ่งสําคัญในสภาพแวดล้อมที่มีจอแสดงผลหลายจอ เมื่อเข้าถึงทรัพยากร บริบทของกิจกรรม (ซึ่งแสดง) จะแตกต่างจากบริบทของแอปพลิเคชัน (ซึ่งไม่แสดง)

บริบทของกิจกรรมมีข้อมูลเกี่ยวกับจอแสดงผลและได้รับการปรับให้เหมาะกับพื้นที่ในจอแสดงผลที่กิจกรรมปรากฏอยู่เสมอ วิธีนี้ช่วยให้คุณได้รับข้อมูลที่ถูกต้องเกี่ยวกับความหนาแน่นของการแสดงผลหรือเมตริกหน้าต่างของแอป ใช้บริบทกิจกรรม (หรือบริบทอื่นที่อิงตาม UI) เสมอเพื่อรับข้อมูลเกี่ยวกับหน้าต่างหรือจอแสดงผลปัจจุบัน ซึ่งจะส่งผลต่อ API ของระบบบางรายการที่ใช้ข้อมูลจากบริบทด้วย

รับข้อมูลจอแสดงผล

คุณสามารถใช้คลาส Display เพื่อรับข้อมูลเกี่ยวกับจอแสดงผลหนึ่งๆ เช่น ขนาดหรือ Flag ที่ระบุว่าจอแสดงผลนั้นปลอดภัยหรือไม่ หากต้องการดูจอแสดงผลที่ใช้ได้ ให้ใช้บริการของระบบ DisplayManager โดยทำดังนี้

val displayManager = getSystemService(Context.DISPLAY_SERVICE) as DisplayManager
val displays = displayManager.getDisplays()

จัดการการเปิดตัวและการกําหนดค่ากิจกรรม

เมื่อใช้จอแสดงผลที่เชื่อมต่อ แอปจะระบุจอแสดงผลที่ควรทำงานได้เมื่อเปิดแอปหรือสร้างกิจกรรมอื่น ลักษณะการทํางานนี้ขึ้นอยู่กับโหมดการเริ่มกิจกรรมที่กําหนดไว้ในไฟล์ Manifest และ Flag และตัวเลือก Intent ที่กําหนดโดยเอนทิตีที่เริ่มกิจกรรม

เมื่อกิจกรรมย้ายไปยังจอแสดงผลรอง แอปอาจมีการอัปเดตบริบท การปรับขนาดหน้าต่าง รวมถึงการเปลี่ยนแปลงการกำหนดค่าและทรัพยากร หากกิจกรรมจัดการการเปลี่ยนแปลงการกําหนดค่า ระบบจะแจ้งให้ทราบใน onConfigurationChanged() ไม่เช่นนั้น ระบบจะเปิดกิจกรรมอีกครั้ง

หากโหมดการเริ่มที่เลือกสําหรับกิจกรรมอนุญาตให้มีอินสแตนซ์หลายรายการ การเริ่มในหน้าจอรองจะสร้างอินสแตนซ์ใหม่ของกิจกรรมได้ กิจกรรมทั้ง 2 รายการจะกลับมาทำงานต่อพร้อมกัน ซึ่งอาจเป็นประโยชน์ในบางสถานการณ์ที่มีการทํางานหลายอย่างพร้อมกัน

คุณเปิดกิจกรรมบนจอแสดงผลที่ต้องการได้โดยใช้ ActivityOptions โดยทำดังนี้

val options = ActivityOptions.makeBasic()
options.setLaunchDisplayId(targetDisplay.displayId)
startActivity(intent, options.toBundle())

หลีกเลี่ยงรายการที่อนุญาตของอุปกรณ์

บางครั้งแอปอาจจำกัด UI และฟีเจอร์ของหน้าจอขนาดใหญ่ไว้สำหรับอุปกรณ์บางรุ่นผ่านรายการที่อนุญาตหรือโดยการตรวจสอบขนาดการแสดงผลในตัว เมื่อใช้จอแสดงผลที่เชื่อมต่อแล้ว แนวทางนี้จะไม่มีประสิทธิภาพอีกต่อไป เนื่องจากอุปกรณ์ใหม่เกือบทุกรุ่นเชื่อมต่อกับหน้าจอขนาดใหญ่ได้ ออกแบบแอปให้ปรับเปลี่ยนตามขนาดและความหนาแน่นของหน้าจอต่างๆ ได้

รองรับอุปกรณ์ต่อพ่วงภายนอก

เมื่อผู้ใช้เชื่อมต่อกับจอแสดงผลภายนอก มักจะสร้างสภาพแวดล้อมที่คล้ายกับเดสก์ท็อปมากกว่า ซึ่งมักจะเกี่ยวข้องกับการใช้แป้นพิมพ์ หนู แทร็กแพด เว็บแคม ไมโครโฟน และลำโพงภายนอก คุณต้องตรวจสอบว่าแอปทำงานร่วมกับอุปกรณ์ต่อพ่วงเหล่านี้ได้อย่างราบรื่น ซึ่งรวมถึงการจัดการแป้นพิมพ์ลัด การจัดการการโต้ตอบของเคอร์เซอร์เมาส์ การรองรับกล้องหรือไมโครโฟนภายนอกอย่างถูกต้อง และการเคารพการกำหนดเส้นทางเอาต์พุตเสียง โปรดดูรายละเอียดเพิ่มเติมที่หัวข้อความเข้ากันได้ของอินพุตบนหน้าจอขนาดใหญ่

เพิ่มประสิทธิภาพการทำงานของผู้ใช้

จอแสดงผลที่เชื่อมต่ออินเทอร์เน็ตเป็นโอกาสที่สำคัญในการปรับปรุงประสิทธิภาพการทำงานของผู้ใช้ ตอนนี้คุณมีเครื่องมือในการสร้างแอปบนอุปกรณ์เคลื่อนที่ที่มอบประสบการณ์การใช้งานเทียบเท่าแอปพลิเคชันบนเดสก์ท็อปแล้ว ลองใช้ฟีเจอร์ต่อไปนี้เพื่อเพิ่มประสิทธิภาพการทำงานของผู้ใช้

  • อนุญาตให้ผู้ใช้เปิดอินสแตนซ์ของแอปเดียวกันได้หลายรายการ ซึ่งมีประโยชน์อย่างยิ่งสำหรับงานต่างๆ เช่น การเปรียบเทียบเอกสาร การจัดการการสนทนาที่แตกต่างกัน หรือดูไฟล์หลายรายการพร้อมกัน
  • อนุญาตให้ผู้ใช้แชร์ข้อมูลที่เป็นริชมีเดียทั้งในและนอกแอปด้วยฟีเจอร์ลากและวาง
  • ช่วยให้ผู้ใช้คงเวิร์กโฟลว์ไว้ได้แม้จะมีการเปลี่ยนแปลงการกําหนดค่าโดยใช้ระบบการจัดการสถานะที่มีประสิทธิภาพ

เมื่อทำตามหลักเกณฑ์เหล่านี้และใช้ตัวอย่างโค้ดที่ระบุไว้ คุณจะสร้างแอปที่ปรับให้เข้ากับจอแสดงผลที่เชื่อมต่อได้อย่างราบรื่น ซึ่งมอบประสบการณ์การใช้งานที่สมบูรณ์และมีประสิทธิภาพมากขึ้นให้แก่ผู้ใช้