Hỗ trợ nhiều cửa sổ

Trong Android 7.0 trở lên, các thiết bị có thể hiển thị nhiều ứng dụng cùng lúc bằng chế độ nhiều cửa sổ. Android hỗ trợ 3 cấu hình nhiều cửa sổ:

  • Tuỳ ý: Cho phép người dùng thay đổi kích thước ngăn hoạt động một cách linh hoạt và có thể xem nhiều hơn 2 ứng dụng trên màn hình. Đối với cửa sổ kiểu máy tính, người dùng có thể tạo các cửa sổ tuỳ ý trên máy tính có các hoạt động tương tác theo kiểu máy tính.
  • Chia đôi màn hình: Chế độ triển khai nhiều cửa sổ mặc định, cung cấp 2 ngăn hoạt động để người dùng có thể đặt các ứng dụng.
  • Hình trong hình (PiP): Cho phép các thiết bị chạy Android phát nội dung video trong một cửa sổ nhỏ trong khi người dùng tương tác với các ứng dụng khác.

Yêu cầu đối với thiết bị có nhiều cửa sổ

Chế độ nhiều cửa sổ được bật theo mặc định trong Android 7.0 trở lên. Để tắt tính năng này, hãy đặt cờ config_supportsMultiWindow thành false trong tệp config.xml của thiết bị.

Theo mặc định, chế độ nhiều cửa sổ sẽ bị tắt trên tất cả các thiết bị có RAM thấp (thiết bị khai báo ActivityManager.isLowRam). Các thiết bị có RAM thấp sẽ bỏ qua giá trị của cờ config_supportsMultiWindow.

Freeform

Tính năng tạo cửa sổ tuỳ ý cho phép người dùng tạo các cửa sổ có thể thay đổi kích thước tuỳ ý. Chế độ cửa sổ tự do là điều kiện tiên quyết để sử dụng cửa sổ kiểu máy tính. Sau đây là các yêu cầu về thiết bị để bật tính năng cửa sổ có thể đổi kích thước:

  • Bật cờ config_supportsMultiWindow.
  • Bật tính năng quản lý cửa sổ có thể đổi kích thước theo một trong các cách sau:
    • Bật cờ config_freeformWindowManagement trong config.xml:
      <feature name="android.software.freeform_window_management" />
    • Thêm những nội dung sau vào tệp makefile của thiết bị:
      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

Trong Android 16, OEM có thể hỗ trợ cửa sổ kiểu máy tính trên thiết bị của họ cho cấu hình nhiều cửa sổ có thể đổi kích thước bằng cách sử dụng Bật cửa sổ kiểu máy tính.

Màn hình kiểu máy tính

Tính năng cửa sổ kiểu máy tính cung cấp một không gian làm việc để thực hiện đa nhiệm trên màn hình lớn, được xây dựng dựa trên các cửa sổ dạng tự do. Không gian làm việc tồn tại song song với chế độ toàn màn hình, với các hành vi và khả năng hỗ trợ giao diện người dùng bổ sung giúp người dùng có trải nghiệm đa nhiệm linh hoạt hơn:

  • Tương tác bằng bàn phím hoặc chuột: Hỗ trợ cả tương tác ưu tiên thao tác chạm và tương tác ưu tiên bàn phím hoặc chuột.
  • Cửa sổ có thể đổi kích thước: Chạy các ứng dụng trong cửa sổ có thể di chuyển và đổi kích thước, có thanh chú thích và các chế độ điều khiển cửa sổ.
  • Thanh tác vụ nâng cao: Giúp bạn dễ dàng truy cập vào các ứng dụng đang chạy và ứng dụng được ghim.
  • Tối ưu hoá màn hình ngoài: Biến màn hình được kết nối thành môi trường máy tính cho các thiết bị được hỗ trợ.
  • Không gian làm việc ảo: Cho phép người dùng sắp xếp các ứng dụng trên nhiều không gian làm việc.

Đáp ứng các điều kiện tiên quyết sau để định cấu hình thiết bị cho tính năng tạo cửa sổ trên máy tính:

  • Bật các cờ sau:
    • Tất cả các điều kiện tiên quyết cho tính năng cửa sổ linh hoạt
    • Cờ cửa sổ kiểu máy tính trên toàn cầu config_isDesktopModeSupported
  • Giao diện người dùng hệ thống yêu cầu màn hình có chiều rộng tối thiểu là 600 dp. Tính năng tạo cửa sổ kiểu máy tính có thể không hoạt động như mong đợi trên màn hình nhỏ.
  • Thiết bị không được là thiết bị có RAM thấp. ActivityManager.isLowRam phải trả về false, vì các thiết bị có RAM thấp không đủ điều kiện sử dụng bất kỳ tính năng nào về chế độ nhiều cửa sổ.

Bảng sau đây liệt kê các cấu hình mà bạn có thể dùng để định cấu hình thiết bị cho tính năng tạo cửa sổ trên máy tính, tuỳ thuộc vào kích thước màn hình và cách bạn dự định sử dụng thiết bị:

Chế độ Thiết bị cầm tay chỉ có chế độ toàn màn hình Thiết bị cầm tay ưu tiên chế độ toàn màn hình chiếu lên màn hình được kết nối Màn hình lớn ở chế độ toàn màn hình mở rộng sang màn hình được kết nối Màn hình lớn ưu tiên chế độ cửa sổ trên máy tính
Ví dụ về hệ số hình dạng Điện thoại cầm tay Điện thoại cầm tay có hỗ trợ HDMI cho màn hình ngoài Máy tính bảng có hỗ trợ HDMI cho màn hình ngoài Máy tính bảng có bàn phím hỗ trợ HDMI cho màn hình ngoài
Trải nghiệm trên màn hình nội bộ Hỗ trợ chế độ toàn màn hình, chia đôi màn hình, PiP, chế độ hình dạng tuỳ ý không phải trên máy tính Hỗ trợ chế độ toàn màn hình, chia đôi màn hình và hình trong hình Chế độ toàn màn hình, chia đôi màn hình, cửa sổ nổi hỗ trợ chế độ cửa sổ kiểu máy tính thông qua các không gian làm việc riêng biệt Chế độ cửa sổ kiểu máy tính là chế độ cửa sổ mặc định (hỗ trợ các màn hình riêng biệt); người dùng có thể chuyển sang chế độ toàn màn hình hoặc chế độ cảm ứng của cửa sổ kiểu máy tính thông qua các màn hình riêng biệt
Trải nghiệm kết nối màn hình Chỉ phản chiếu màn hình trong Tính năng cửa sổ kiểu máy tính chỉ hoạt động trên màn hình được kết nối Chế độ cửa sổ kiểu máy tính mở rộng không gian làm việc; có trên màn hình trong Chế độ cửa sổ kiểu máy tính mở rộng không gian làm việc; có trên màn hình trong
Chế độ cài đặt cấu hình
config_supportsMultiWindow true true true true
config_freeformWindowManagement true true true true
config_isDesktopModeSupported false true true true
config_canInternalDisplayHostDesktops Bị bỏ qua false true true
config_enterDesktopByDefaultOnFreeformDisplay Bị bỏ qua false false true

config_isDesktopModeSupported

Cờ lớp phủ cấu hình config_isDesktopModeSupported là cờ cấp cao nhất để bật chế độ cửa sổ kiểu máy tính. Nếu bạn không bật chế độ này, tất cả các chế độ cài đặt cấu hình khác sẽ bị bỏ qua. Đặt thành true trong config.xml:

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

Khi config_isDesktopModeSupportedtrue, hệ thống sẽ tự động coi các màn hình ngoài đủ điều kiện (chẳng hạn như màn hình kết nối bằng DisplayPort hoặc HDMI) là các màn hình có thể dùng chế độ cửa sổ kiểu máy tính. Trình quản lý cửa sổ phải coi màn hình là đủ điều kiện (ít nhất là công khai và đáng tin cậy, hãy xem phần Cửa sổ kiểu máy tính). Theo mặc định, hệ thống sẽ cố gắng chạy các tác vụ ở chế độ cửa sổ có thể đổi kích thước trên những màn hình này.

config_canInternalDisplayHostDesktops

Cờ lớp phủ cấu hình config_canInternalDisplayHostDesktops cho phép chế độ cửa sổ trên máy tính trên màn hình trong của thiết bị. Đặt thành true trong config.xml:

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

Tính năng cửa sổ kiểu máy tính hoạt động hiệu quả nhất trên thiết bị màn hình lớn như máy tính bảng, so với điện thoại di động có màn hình nhỏ hơn. Nếu không được bật, tính năng cửa sổ kiểu máy tính sẽ chỉ được hỗ trợ trên màn hình ngoài (giả sử thiết bị hỗ trợ HDMI).

config_enterDesktopByDefaultOnFreeformDisplay

Cờ lớp phủ cấu hình config_enterDesktopByDefaultOnFreeformDisplay đặt chế độ cửa sổ kiểu máy tính làm chế độ cửa sổ mặc định trên màn hình trong của thiết bị. Nếu không bật, chế độ toàn màn hình sẽ là chế độ cửa sổ mặc định, với các màn hình cùng tồn tại. Đặt thành true trong config.xml:

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

Bật hạn mức tác vụ

Để định cấu hình số lượng tác vụ tối đa được hỗ trợ trong tính năng tạo cửa sổ kiểu máy tính, hãy đặt cờ lớp phủ cấu hình config_maxDesktopWindowingActiveTasks trong config.xml thành số lượng tác vụ tối đa được hỗ trợ. Để hỗ trợ số lượng tác vụ không giới hạn, hãy đặt giá trị cờ thành 0:

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

Bật hạn mức sử dụng không gian làm việc

Để định cấu hình số lượng không gian làm việc ảo tối đa được hỗ trợ trong tính năng cửa sổ kiểu máy tính, hãy đặt cờ lớp phủ cấu hình config_maxDesktopWindowingDesks trong config.xml thành số lượng không gian làm việc tối đa được hỗ trợ. Để hỗ trợ số lượng bàn không giới hạn, hãy đặt giá trị cờ thành 0:

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

Chia đôi màn hình

Chế độ nhiều cửa sổ mặc định là chế độ chia đôi màn hình, trong đó Giao diện người dùng hệ thống được chia ở giữa thiết bị theo hướng dọc hoặc ngang. Người dùng có thể đổi kích thước cửa sổ bằng cách kéo đường phân chia từ bên này sang bên kia hoặc từ trên xuống dưới, tuỳ thuộc vào hướng của thiết bị.

Sau khi bật chế độ chia đôi màn hình, nhà sản xuất thiết bị có thể chọn bật chế độ cửa sổ nổi hoặc chế độ cửa sổ tuỳ ý.

Android 8.0 trở lên cải thiện chế độ chia đôi màn hình bằng cách nén trình chạy khi người dùng nhấn vào nút Trang chủ. Để biết thông tin chi tiết về cách triển khai, hãy xem phần Tương tác ở chế độ chia đôi màn hình.

Hình trong hình

Sau khi bật chế độ nhiều cửa sổ bằng cờ config_supportsMultiWindow, các nhà sản xuất thiết bị có thể hỗ trợ chế độ hình trong hình. Chế độ này cho phép người dùng xem video trong khi duyệt xem các hoạt động khác. Mặc dù tính năng này nhắm đến các thiết bị Android TV, nhưng các loại thiết bị khác cũng có thể hỗ trợ tính năng này.

Để hỗ trợ chế độ PiP, hãy bật tính năng hệ thống PackageManager#FEATURE_PICTURE_IN_PICTURE trong /android/frameworks/base/core/java/android/content/pm/PackageManager.java.

Để biết thêm thông tin chi tiết về cách triển khai chế độ PiP cho các thiết bị chạy Android 8.0 trở lên, hãy xem phần Chế độ hình trong hình.

Giao diện người dùng hệ thống

Hỗ trợ tất cả Giao diện người dùng hệ thống tiêu chuẩn theo Xác minh chế độ nhiều cửa sổ.

Ứng dụng

Để hỗ trợ chế độ nhiều cửa sổ cho các ứng dụng được tải sẵn, hãy xem phần Hỗ trợ chế độ nhiều cửa sổ.

Xác nhận kết quả

Để xác thực việc triển khai chế độ nhiều cửa sổ, hãy chạy các kiểm thử CTS liên quan và làm theo hướng dẫn Xác minh chế độ nhiều cửa sổ.

Phiên bản Android Bài kiểm thử 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 trở lên /platform/cts/tests/framework/base/windowmanager/src/android/server/wm