Hỗ trợ chế độ kết xuất cửa sổ trên màn hình

Chế độ cửa sổ trên máy tính cho phép người dùng chạy đồng thời nhiều ứng dụng trong các cửa sổ ứng dụng có thể đổi kích thước để có trải nghiệm linh hoạt, giống như trên máy tính.

Trong hình 1, bạn có thể thấy cách sắp xếp màn hình bằng chế độ cửa sổ trên màn hình bật. Những điều cần lưu ý:

  • Người dùng có thể chạy đồng thời nhiều ứng dụng cùng lúc.
  • Thanh tác vụ nằm ở vị trí cố định ở cuối màn hình, hiển thị các ứng dụng đang chạy. Người dùng có thể ghim ứng dụng để truy cập nhanh.
  • Thanh tiêu đề mới có thể tuỳ chỉnh trang trí đầu mỗi cửa sổ bằng các nút điều khiển như thu nhỏ và phóng to.
Hình 1. Cửa sổ máy tính trên máy tính bảng.

Theo mặc định, các ứng dụng sẽ mở ở chế độ toàn màn hình trên máy tính bảng Android. Để chạy một ứng dụng trong cửa sổ màn hình, hãy nhấn và giữ ô điều khiển cửa sổ ở đầu màn hình rồi kéo ô điều khiển trong giao diện người dùng, như trong hình 2.

Khi một ứng dụng đang mở trong cửa sổ trên máy tính, các ứng dụng khác cũng sẽ mở trong cửa sổ trên máy tính.

Hình 2. Nhấn, giữ và kéo tay nắm cửa sổ ứng dụng để chuyển sang chế độ cửa sổ trên máy tính.

Người dùng cũng có thể gọi cửa sổ màn hình từ trình đơn hiển thị bên dưới ô điều khiển cửa sổ khi bạn nhấn hoặc nhấp vào ô điều khiển hoặc sử dụng phím tắt Phím meta (Windows, Command hoặc Search) + Ctrl + Down.

Người dùng thoát khỏi chế độ cửa sổ trên máy tính bằng cách đóng tất cả cửa sổ đang hoạt động hoặc bằng cách nắm lấy tay cầm cửa sổ ở đầu cửa sổ trên máy tính rồi kéo ứng dụng lên đầu màn hình. Phím tắt Meta + H cũng thoát khỏi chế độ cửa sổ trên máy tính và chạy lại ứng dụng ở chế độ toàn màn hình.

Để quay lại chế độ cửa sổ trên máy tính, hãy nhấn hoặc nhấp vào thẻ không gian trên máy tính trong màn hình Gần đây.

Chế độ đổi kích thước và tương thích

Trong chế độ cửa sổ trên máy tính, các ứng dụng bị khoá hướng có thể tự do thay đổi kích thước. Điều đó có nghĩa là ngay cả khi một hoạt động được khoá theo hướng dọc, người dùng vẫn có thể đổi kích thước ứng dụng thành cửa sổ theo hướng ngang.

Hình 3. Đổi kích thước cửa sổ của một ứng dụng bị hạn chế để chỉ hiển thị theo hướng dọc thành hướng ngang.

Ứng dụng được khai báo là không thể đổi kích thước (nghĩa là resizableActivity = false) điều chỉnh tỷ lệ giao diện người dùng mà vẫn giữ nguyên tỷ lệ khung hình.

Hình 4. Giao diện người dùng của ứng dụng không thể đổi kích thước sẽ điều chỉnh theo tỷ lệ khi cửa sổ đổi kích thước.

Các ứng dụng máy ảnh khoá hướng hoặc được khai báo là không thể đổi kích thước sẽ có cách xử lý đặc biệt cho kính ngắm máy ảnh: cửa sổ có thể đổi kích thước hoàn toàn, nhưng kính ngắm vẫn giữ nguyên tỷ lệ khung hình. Bằng cách giả định ứng dụng luôn chạy ở chế độ dọc hoặc ngang, các ứng dụng được mã hoá cứng hoặc tạo các giả định dẫn đến việc tính toán nhầm hình ảnh xem trước hoặc hình ảnh được chụp hướng hoặc tỷ lệ khung hình khiến hình ảnh bị kéo giãn, sang một bên hoặc lật ngược.

Cho đến khi các ứng dụng sẵn sàng triển khai kính ngắm của máy ảnh thích ứng hoàn toàn, cách xử lý đặc biệt mang lại trải nghiệm người dùng cơ bản hơn giúp giảm thiểu có thể gây ra những ảnh hưởng mà giả định sai lầm.

Để tìm hiểu thêm về chế độ tương thích cho ứng dụng máy ảnh, hãy xem bài viết Chế độ tương thích với thiết bị.

Hình 5. Kính ngắm của máy ảnh giữ nguyên tỷ lệ khung hình khi cửa sổ đổi kích thước.

Phần lồng ghép tiêu đề có thể tuỳ chỉnh

Tất cả ứng dụng chạy ở chế độ cửa sổ trên máy tính đều có thanh tiêu đề, ngay cả ở chế độ chìm đắm.
Đảm bảo nội dung của ứng dụng không bị thanh tiêu đề che khuất. Thanh tiêu đề là loại phần lồng ghép thanh phụ đề: androidx.compose.foundation.layout.WindowInsets.Companion.captionBar(); trong lượt xem, WindowInsets.Type.captionBar(), vốn là một phần của thanh hệ thống.

Bạn có thể tìm hiểu thêm về cách xử lý phần lồng ghép trong bài viết Hiển thị nội dung tràn viền trong ứng dụng và xử lý phần lồng ghép cửa sổ trong Compose.

Bạn cũng có thể tuỳ chỉnh thanh tiêu đề. Android 15 ra mắt kiểu giao diện APPEARANCE_TRANSPARENT_CAPTION_BAR_BACKGROUND để tạo thanh tiêu đề trong suốt để cho phép các ứng dụng vẽ nội dung tuỳ chỉnh bên trong thanh tiêu đề.

Sau đó, ứng dụng sẽ chịu trách nhiệm tạo kiểu cho phần trên cùng của nội dung để trông giống như thanh chú thích (nền, nội dung tuỳ chỉnh, v.v.) ngoại trừ các thành phần chú thích hệ thống (nút đóng và phóng to) do hệ thống vẽ trên thanh chú thích trong suốt ở đầu ứng dụng.

Các ứng dụng có thể bật/tắt giao diện của các thành phần hệ thống bên trong chú thích cho giao diện sáng và tối bằng cách sử dụng APPEARANCE_LIGHT_CAPTION_BARS, tương tự như cách bật/tắt thanh trạng thái và thanh điều hướng.

Android 15 cũng giới thiệu phương thức WindowInsets#getBoundingRects() cho phép các ứng dụng tự kiểm tra các phần lồng ghép của thanh chú thích chi tiết hơn. Các ứng dụng có thể phân biệt những khu vực mà hệ thống vẽ các thành phần hệ thống và các khu vực chưa sử dụng nơi ứng dụng có thể đặt nội dung tuỳ chỉnh mà không chồng chéo các phần tử hệ thống.

Danh sách đối tượng Rect do API trả về cho biết các vùng hệ thống cần tránh. Phần không gian còn lại (được tính bằng cách trừ các hình chữ nhật) từ phần lồng ghép thanh phụ đề) là nơi ứng dụng có thể vẽ mà không cần chồng chéo các phần tử hệ thống và có thể nhận đầu vào.

Chrome trước và sau khi triển khai tiêu đề tuỳ chỉnh.
Hình 6. Chrome trước và sau khi triển khai tiêu đề tuỳ chỉnh.

Chế độ đa nhiệm và hỗ trợ nhiều phiên bản

Tính năng đa nhiệm là yếu tố cốt lõi trong quá trình kết xuất cửa sổ trên máy tính để bàn và cho phép các phiên bản ứng dụng của bạn có thể giúp tăng năng suất của người dùng một cách đáng kể.

Android 15 ra mắt PROPERTY_ HỖ TRỢ_MULTI_INSTANCE_SYSTEM_UI, ứng dụng nào có thể thiết lập để chỉ định rằng giao diện người dùng hệ thống sẽ được hiển thị cho ứng dụng cho phép khởi chạy ứng dụng dưới dạng nhiều thực thể.

Quản lý các phiên bản ứng dụng bằng cử chỉ kéo

Ở chế độ nhiều cửa sổ, người dùng có thể bắt đầu một thực thể ứng dụng mới bằng cách kéo một phần tử thành phần hiển thị ra khỏi cửa sổ của ứng dụng. Người dùng cũng có thể di chuyển các phần tử giữa các phiên bản của cùng một ứng dụng.

Hình 7. Khởi động một phiên bản Chrome mới bằng cách kéo một thẻ ra khỏi cửa sổ trên máy tính.

Android 15 giới thiệu 2 cờ để tuỳ chỉnh hành vi kéo và thả:

  • DRAG_FLAG_START_INTENT_SENDER_ON_UNHANDLED_DRAG: Cho biết rằng thao tác kéo chưa được xử lý phải được uỷ quyền cho hệ thống để bắt đầu nếu không có cửa sổ hiển thị nào xử lý thao tác thả. Khi sử dụng cờ này, phương thức gọi phải cung cấp ClipDataItem có chứa IntentSender bất biến thành một hoạt động được chạy (xem ClipData.Item.Builder#setIntentSender()). Hệ thống có thể chạy ý định hoặc không chạy ý định dựa trên các yếu tố như màn hình hiện tại hoặc chế độ cửa sổ hiện tại. Nếu hệ thống không chạy ý định đó, ý định sẽ là bị huỷ bằng quy trình kéo và thả thông thường.

  • DRAG_FLAG_GLOBAL_SAME_APPLICATION: Cho biết thao tác kéo có thể vượt qua ranh giới cửa sổ (đối với nhiều phiên bản của cùng một ứng dụng).

    Khi startDragAndDrop() được gọi với cờ này được đặt, chỉ những cửa sổ hiển thị thuộc cùng một ứng dụng mới có thể tham gia thao tác kéo và nhận nội dung được kéo.

Hình 8. Di chuyển thẻ giữa hai phiên bản của ứng dụng Chrome.

Các phương pháp tối ưu hoá khác

Tuỳ chỉnh quá trình khởi chạy ứng dụng và chuyển đổi ứng dụng từ chế độ cửa sổ trên máy tính sang chế độ toàn màn hình.

Chỉ định kích thước và vị trí mặc định

Không phải ứng dụng nào (ngay cả khi có thể đổi kích thước) cũng cần có cửa sổ lớn để mang lại giá trị cho người dùng. Bạn có thể sử dụng phương thức ActivityOptions#setLaunchBounds() để chỉ định kích thước và vị trí mặc định khi một hoạt động được khởi chạy.

Chuyển sang chế độ toàn màn hình từ không gian máy tính

Các ứng dụng có thể chuyển sang chế độ toàn màn hình theo phương thức lập trình bằng cách gọi Activity#requestFullScreenMode(). Phương thức này sẽ đặt ứng dụng ở chế độ toàn màn hình ngay từ cửa sổ trên màn hình.