รองรับหลายหน้าต่าง

ใน Android 7.0 ขึ้นไป อุปกรณ์จะแสดงแอปหลายแอป พร้อมกันได้โดยใช้ฟีเจอร์หลายหน้าต่าง Android รองรับการกำหนดค่าหลายหน้าต่าง 3 แบบ ดังนี้

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

ข้อกำหนดของอุปกรณ์สำหรับฟีเจอร์หลายหน้าต่าง

ระบบจะเปิดใช้การรองรับฟีเจอร์หลายหน้าต่างโดยค่าเริ่มต้นใน Android 7.0 ขึ้นไป หากต้องการปิดใช้ ให้ตั้งค่าแฟล็ก config_supportsMultiWindow เป็น false ในไฟล์ config.xml ของอุปกรณ์

ระบบจะปิดใช้ฟีเจอร์หลายหน้าต่างโดยค่าเริ่มต้นในอุปกรณ์ที่มี RAM ต่ำทั้งหมด (อุปกรณ์ที่ ประกาศ ActivityManager.isLowRam) อุปกรณ์ที่มี RAM ต่ำ จะข้ามค่าของแฟล็ก config_supportsMultiWindow

Freeform

การแสดงหน้าต่าง Freeform ช่วยให้ผู้ใช้สร้างหน้าต่างที่ปรับขนาดได้อย่างอิสระ การแสดงหน้าต่าง Freeform เป็นข้อกำหนดเบื้องต้นสำหรับ หน้าต่างเดสก์ท็อป ข้อกำหนดของอุปกรณ์สำหรับการ เปิดใช้การแสดงหน้าต่าง Freeform มีดังนี้

  • เปิดใช้แฟล็ก config_supportsMultiWindow
  • เปิดใช้การจัดการหน้าต่าง Freeform ด้วยวิธีใดวิธีหนึ่งต่อไปนี้
    • เปิดใช้แฟล็ก config_freeformWindowManagement ใน config.xml
      <feature name="android.software.freeform_window_management" />
    • รวมรายการต่อไปนี้ในไฟล์ makefile ของอุปกรณ์
      PRODUCT_COPY_FILES += \
      frameworks/native/data/etc/android.software.freeform_window_management.xml:$(TARGET_COPY_OUT_SYSTEM)/etc/permissions/android.software.freeform_window_management.xml

ใน Android 16, OEM สามารถรองรับหน้าต่างเดสก์ท็อปในอุปกรณ์สำหรับการกำหนดค่าหลายหน้าต่าง Freeform ได้โดยใช้การเปิดใช้หน้าต่างเดสก์ท็อป

หน้าต่างเดสก์ท็อป

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

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

ทำตามข้อกำหนดเบื้องต้นต่อไปนี้เพื่อกำหนดค่าอุปกรณ์สำหรับการแสดงหน้าต่างบนเดสก์ท็อป

  • เปิดใช้แฟล็กต่อไปนี้
    • ข้อกำหนดเบื้องต้นทั้งหมดสำหรับการแสดงหน้าต่าง Freeform
    • แฟล็กหน้าต่างเดสก์ท็อปส่วนกลาง config_isDesktopModeSupported
  • UI ของระบบต้องใช้จอแสดงผลที่มีความกว้างอย่างน้อย 600 dp การแสดงหน้าต่างเดสก์ท็อป อาจไม่ทำงานตามที่คาดไว้ในหน้าจอขนาดเล็ก
  • อุปกรณ์ต้องไม่ใช่ อุปกรณ์ที่มี RAM ต่ำ ActivityManager.isLowRam ต้องแสดงผลเป็น false เนื่องจากอุปกรณ์ที่มี RAM ต่ำไม่มีสิทธิ์ใช้ฟีเจอร์ หลายหน้าต่าง

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

โหมด อุปกรณ์พกพาแบบเต็มหน้าจอเท่านั้น อุปกรณ์พกพาแบบเต็มหน้าจอเป็นหลักที่แสดงผลไปยังจอแสดงผลที่เชื่อมต่อ หน้าจอขนาดใหญ่แบบเต็มหน้าจอเป็นหลักที่ขยายไปยังจอแสดงผลที่เชื่อมต่อ หน้าจอขนาดใหญ่แบบแสดงหน้าต่างบนเดสก์ท็อปเป็นหลัก
ตัวอย่างรูปแบบของอุปกรณ์ โทรศัพท์แบบพกพา โทรศัพท์แบบพกพาที่รองรับ HDMI สำหรับจอแสดงผลภายนอก แท็บเล็ตที่รองรับ HDMI สำหรับจอแสดงผลภายนอก แท็บเล็ตที่มีแป้นพิมพ์ที่รองรับ HDMI สำหรับจอแสดงผลภายนอก
ประสบการณ์การใช้งานจอแสดงผลภายใน รองรับแบบเต็มหน้าจอ แยกหน้าจอ PiP และ Freeform ที่ไม่ใช่เดสก์ท็อป รองรับแบบเต็มหน้าจอ แยกหน้าจอ และ PiP รองรับหน้าต่างเดสก์ท็อปแบบเต็มหน้าจอ แยกหน้าจอ และ PIP ผ่านเดสก์แยก หน้าต่างเดสก์ท็อปเป็นโหมดการแสดงหน้าต่างเริ่มต้น (รองรับเดสก์แยก) ผู้ใช้สามารถเข้าสู่หน้าต่างเดสก์ท็อปแบบเต็มหน้าจอหรือโหมดสัมผัสผ่านเดสก์แยกได้
ประสบการณ์การใช้งานจอแสดงผลที่เชื่อมต่อ การมิเรอร์จอแสดงผลภายในเท่านั้น การแสดงหน้าต่างบนเดสก์ท็อปในจอแสดงผลที่เชื่อมต่อเท่านั้น หน้าต่างเดสก์ท็อปขยายเดสก์ และพร้อมใช้งานในจอแสดงผลภายใน หน้าต่างเดสก์ท็อปขยายเดสก์ และพร้อมใช้งานในจอแสดงผลภายใน
การตั้งค่า Config
config_supportsMultiWindow true true true true
config_freeformWindowManagement true true true true
config_isDesktopModeSupported false true true true
config_canInternalDisplayHostDesktops ละเว้น false true true
config_enterDesktopByDefaultOnFreeformDisplay ละเว้น false false true

config_isDesktopModeSupported

แฟล็กการวางซ้อน Config config_isDesktopModeSupported เป็นแฟล็กระดับบนสุดสำหรับการเปิดใช้หน้าต่างเดสก์ท็อป หากไม่ได้เปิดใช้ ระบบจะข้ามการตั้งค่า Config อื่นๆ ทั้งหมด ตั้งค่าเป็น true ใน config.xml ดังนี้

<!-- Globally enable Desktop windowing logic -->
    <bool name="config_isDesktopModeSupported">true</bool>

เมื่อ config_isDesktopModeSupported เป็น true ระบบจะถือว่าจอแสดงผลภายนอกที่มีสิทธิ์ (เช่น จอแสดงผลที่เชื่อมต่อด้วย DisplayPort หรือ HDMI) เป็นจอแสดงผลที่อาจใช้สำหรับหน้าต่างเดสก์ท็อปโดยอัตโนมัติ จอแสดงผลต้องได้รับการพิจารณาว่ามีสิทธิ์โดย Window Manager (อย่างน้อยต้องเป็นจอแสดงผลสาธารณะและเชื่อถือได้ โปรดดูหน้าต่างเดสก์ท็อป) ระบบจะพยายามเปิดใช้ฟีเจอร์ต่างๆ ในโหมด Freeform บนจอแสดงผลเหล่านี้โดยค่าเริ่มต้น

config_canInternalDisplayHostDesktops

แฟล็กการวางซ้อน Config config_canInternalDisplayHostDesktops จะเปิดใช้การแสดงหน้าต่างบนเดสก์ท็อป ในจอแสดงผลภายในของอุปกรณ์ ตั้งค่าเป็น true ใน config.xml ดังนี้

<!-- Allow the primary internal display to host desktop sessions -->
    <bool name="config_canInternalDisplayHostDesktops">true</bool>

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

config_enterDesktopByDefaultOnFreeformDisplay

แฟล็กการวางซ้อน Config config_enterDesktopByDefaultOnFreeformDisplay จะตั้งค่าหน้าต่างเดสก์ท็อปเป็นโหมดการแสดงหน้าต่างเริ่มต้นในจอแสดงผลภายในของอุปกรณ์ หากไม่ได้เปิดใช้ โหมดเต็มหน้าจอจะเป็นโหมดการแสดงหน้าต่างเริ่มต้น โดยเดสก์ อยู่ร่วมกัน ตั้งค่าเป็น true ใน config.xml ดังนี้

<!-- Enable Desktop windowing as the default windowing mode on the internal display -->
    <bool name="config_enterDesktopByDefaultOnFreeformDisplay">true</bool>

เปิดใช้ขีดจำกัดของงาน

หากต้องการกำหนดค่าจำนวนงานสูงสุดที่รองรับในการแสดงหน้าต่างบนเดสก์ท็อป ให้ตั้งค่า แฟล็กการวางซ้อน Config config_maxDesktopWindowingActiveTasks ใน config.xml เป็นจำนวนงานสูงสุดที่รองรับ หากต้องการรองรับงานจำนวนไม่จำกัด ให้ตั้งค่า แฟล็กเป็น 0 ดังนี้

<!-- Maximum number of tasks supported in desktop windowing -->
      <integer name="config_maxDesktopWindowingActiveTasks">4</integer>

เปิดใช้ขีดจำกัดของเดสก์

หากต้องการกำหนดค่าจำนวนเดสก์เสมือนสูงสุดที่รองรับในการแสดงหน้าต่างบนเดสก์ท็อป ให้ตั้งค่า แฟล็กการวางซ้อน Config config_maxDesktopWindowingDesks ใน config.xml เป็นจำนวนเดสก์สูงสุดที่รองรับ หากต้องการรองรับเดสก์จำนวนไม่จำกัด ให้ตั้งค่า แฟล็กเป็น 0 ดังนี้

<!-- Maximum number of virtual desks supported in desktop windowing -->
      <integer name="config_maxDesktopWindowingDesks">4</integer>

แยกหน้าจอ

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

หลังจากเปิดใช้การแยกหน้าจอแล้ว ผู้ผลิตอุปกรณ์สามารถเลือกเปิดใช้ Freeform หรือ PiP ได้

Android 8.0 ขึ้นไปปรับปรุงการแยกหน้าจอโดยการบีบอัด Launcher เมื่อผู้ใช้แตะ หน้าแรก โปรดดูรายละเอียดการใช้งานที่ การโต้ตอบแบบแยกหน้าจอ

การแสดงภาพซ้อนภาพ

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

หากต้องการรองรับ PiP ให้เปิดใช้ฟีเจอร์ระบบ PackageManager#FEATURE_PICTURE_IN_PICTURE ใน /android/frameworks/base/core/java/android/content/pm/PackageManager.java

โปรดดูรายละเอียดการใช้งาน PiP เพิ่มเติมสำหรับอุปกรณ์ที่ใช้ Android 8.0 ขึ้นไปที่การแสดงภาพซ้อนภาพ

UI ของระบบ

รองรับ UI ของระบบมาตรฐานทั้งหมดตาม การตรวจสอบโหมดหลายหน้าต่าง

แอป

หากต้องการรองรับโหมดหลายหน้าต่างสำหรับแอปที่โหลดไว้ล่วงหน้า โปรดดู หัวข้อการรองรับโหมดหลายหน้าต่าง

การตรวจสอบ

หากต้องการตรวจสอบการใช้งานฟีเจอร์หลายหน้าต่าง ให้เรียกใช้การทดสอบ CTS ที่เกี่ยวข้องและทำตาม การตรวจสอบโหมดหลายหน้าต่าง

เวอร์ชัน Android การทดสอบ CTS
7.0 /platform/cts/hostsidetests/services/activitymanager/src/android/server/cts
8.0 /platform/cts/hostsidetests/services/activityandwindowmanager/activitymanager/src/android/server/cts
9.0 /platform/cts/tests/framework/base/activitymanager/src/android/server/am
Android 10 ขึ้นไป /platform/cts/tests/framework/base/windowmanager/src/android/server/wm