Hỗ trợ màn hình đã kết nối

Màn hình được kết nối mở rộng trải nghiệm cửa sổ trên máy tính cho điện thoại tiêu chuẩn, cho phép người dùng truy cập vào màn hình lớn từ thiết bị di động. Khả năng này mở ra nhiều khả năng mới cho hoạt động tương tác với ứng dụng và năng suất của người dùng.

Tất cả các tính năng độc đáo của chế độ cửa sổ trên máy tính đều áp dụng cho màn hình đã kết nối. Khi bạn kết nối điện thoại với màn hình, trạng thái của điện thoại sẽ không thay đổi và một phiên trên máy tính trống sẽ bắt đầu trên màn hình đã kết nối. Thiết bị và màn hình hoạt động như hai hệ thống riêng biệt, với các ứng dụng dành riêng cho từng màn hình.

Hình 1. Điện thoại kết nối với màn hình ngoài, có một phiên trên máy tính trên màn hình trong khi điện thoại duy trì trạng thái riêng.

Nếu bạn kết nối một thiết bị hỗ trợ chế độ cửa sổ trên máy tính (chẳng hạn như máy tính bảng) với màn hình ngoài, thì phiên trên máy tính sẽ mở rộng trên cả hai màn hình. Sau đó, hai màn hình sẽ hoạt động như một hệ thống liên tục. Chế độ thiết lập này cho phép các cửa sổ, nội dung và con trỏ di chuyển tự do giữa hai màn hình.

Hình 2. Máy tính bảng được kết nối với màn hình bên ngoài, mở rộng phiên máy tính để bàn trên cả hai màn hình.

Để hỗ trợ màn hình kết nối một cách hiệu quả, bạn cần chú ý đến một số khía cạnh trong thiết kế và triển khai ứng dụng. Các phương pháp hay nhất sau đây đảm bảo trải nghiệm người dùng mượt mà và hiệu quả.

Xử lý các thay đổi về màn hình động

Nhiều ứng dụng được xây dựng với giả định rằng đối tượng Display và các đặc điểm của đối tượng đó sẽ không thay đổi trong vòng đời của ứng dụng. Tuy nhiên, khi người dùng kết nối hoặc ngắt kết nối màn hình ngoài, hoặc thậm chí di chuyển cửa sổ ứng dụng giữa các màn hình, đối tượng Display cơ bản liên kết với ngữ cảnh hoặc cửa sổ của ứng dụng có thể thay đổi. Các thuộc tính của màn hình, chẳng hạn như kích thước, độ phân giải, tốc độ làm mới, khả năng hỗ trợ HDR và mật độ, đều có thể khác nhau. Ví dụ: nếu bạn mã hoá cứng các giá trị dựa trên màn hình của điện thoại, thì bố cục của bạn có thể bị lỗi trên màn hình ngoài.

Màn hình bên ngoài cũng có thể có mật độ pixel rất khác nhau. Bạn cần đảm bảo ứng dụng phản hồi chính xác các thay đổi về mật độ. Điều này liên quan đến việc sử dụng pixel không phụ thuộc vào mật độ (dp) cho bố cục, cung cấp tài nguyên dành riêng cho mật độ và đảm bảo giao diện người dùng của bạn có tỷ lệ phù hợp.

Sử dụng ngữ cảnh phù hợp

Việc sử dụng bối cảnh phù hợp là rất quan trọng trong môi trường nhiều màn hình. Khi truy cập vào tài nguyên, bối cảnh của hoạt động (được hiển thị) khác với bối cảnh của ứng dụng (không được hiển thị).

Bối cảnh của hoạt động chứa thông tin về màn hình và luôn được điều chỉnh cho khu vực hiển thị mà hoạt động đó xuất hiện. Điều này cho phép bạn nhận được thông tin chính xác về mật độ hiển thị hoặc các chỉ số về cửa sổ của ứng dụng. Luôn sử dụng bối cảnh hoạt động (hoặc một bối cảnh dựa trên giao diện người dùng khác) để nhận thông tin về cửa sổ hoặc màn hình hiện tại. Điều này cũng ảnh hưởng đến một số API hệ thống có sử dụng thông tin từ bối cảnh.

Nhận thông tin hiển thị

Bạn có thể sử dụng lớp Display để nhận thông tin về một màn hình cụ thể, chẳng hạn như kích thước hoặc cờ cho biết màn hình đó có an toàn hay không. Để xem các màn hình có sẵn, hãy sử dụng dịch vụ hệ thống DisplayManager:

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

Quản lý việc khởi chạy và định cấu hình hoạt động

Với màn hình được kết nối, ứng dụng có thể chỉ định màn hình nào sẽ chạy khi ứng dụng khởi chạy hoặc khi tạo một hoạt động khác. Hành vi này phụ thuộc vào chế độ chạy của hoạt động được xác định trong tệp kê khai cũng như trên các cờ ý định và tuỳ chọn do thực thể đang khởi chạy hoạt động thiết lập.

Khi một hoạt động chuyển sang màn hình phụ, ứng dụng của bạn có thể trải qua quá trình cập nhật bối cảnh, đổi kích thước cửa sổ, cũng như các thay đổi về cấu hình và tài nguyên. Nếu hoạt động có xử lý thay đổi cấu hình, điều này sẽ được thông báo trong onConfigurationChanged(). Nếu không, hoạt động sẽ được khởi chạy lại.

Nếu chế độ chạy đã chọn của một hoạt động cho phép có nhiều thực thể, thì việc khởi chạy trên màn hình phụ có thể tạo ra một thực thể mới của hoạt động đó. Cả hai hoạt động đều được tiếp tục cùng một lúc, điều này có thể có lợi cho một số trường hợp đa nhiệm nhất định.

Bạn có thể chạy một hoạt động trên một màn hình cụ thể bằng ActivityOptions:

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

Tránh danh sách cho phép thiết bị

Đôi khi, ứng dụng hạn chế giao diện người dùng và các tính năng trên màn hình lớn cho một số thiết bị thông qua danh sách cho phép hoặc bằng cách kiểm tra kích thước màn hình tích hợp. Với màn hình được kết nối, phương pháp này không còn hiệu quả nữa vì hầu như mọi thiết bị mới đều có thể kết nối với màn hình lớn. Thiết kế ứng dụng của bạn sao cho thích ứng và đáp ứng được nhiều kích thước màn hình cũng như mật độ điểm ảnh.

Hỗ trợ thiết bị ngoại vi bên ngoài

Khi người dùng kết nối với màn hình ngoài, họ thường tạo một môi trường giống máy tính hơn. Việc này thường liên quan đến việc sử dụng bàn phím, chuột, bàn di chuột, webcam, micrô và loa bên ngoài. Bạn cần đảm bảo ứng dụng của mình hoạt động liền mạch với các thiết bị ngoại vi này. Điều này bao gồm việc xử lý phím tắt, quản lý các hoạt động tương tác với con trỏ chuột, hỗ trợ chính xác máy ảnh hoặc micrô bên ngoài và tuân thủ việc định tuyến đầu ra âm thanh. Để biết thêm thông tin, hãy xem bài viết Khả năng tương thích đầu vào trên màn hình lớn.

Nâng cao năng suất của người dùng

Màn hình được kết nối mang đến cơ hội đáng kể để cải thiện năng suất của người dùng. Giờ đây, bạn có các công cụ để xây dựng ứng dụng di động có thể mang lại trải nghiệm tương đương với ứng dụng dành cho máy tính. Hãy cân nhắc triển khai các tính năng sau để tăng năng suất của người dùng:

  • Cho phép người dùng mở nhiều phiên bản của cùng một ứng dụng. Điều này rất hữu ích cho các tác vụ như so sánh tài liệu, quản lý nhiều cuộc trò chuyện hoặc xem nhiều tệp cùng một lúc.
  • Cho phép người dùng chia sẻ dữ liệu đa dạng thức trong và ngoài ứng dụng bằng thao tác kéo và thả.
  • Giúp người dùng duy trì quy trình làm việc của họ trong các thay đổi về cấu hình bằng cách triển khai một hệ thống quản lý trạng thái mạnh mẽ.

Bằng cách làm theo các nguyên tắc này và sử dụng các ví dụ về mã được cung cấp, bạn có thể tạo các ứng dụng thích ứng liền mạch với màn hình được kết nối, mang đến cho người dùng trải nghiệm phong phú và hiệu quả hơn.