Hướng, tỷ lệ khung hình và khả năng đổi kích thước của ứng dụng

Ứng dụng Android chạy trên nhiều loại thiết bị: điện thoại, máy tính bảng, thiết bị có thể gập lại, thiết bị ChromeOS, ô tô, TV và thậm chí cả thiết bị XR. Để thích ứng với môi trường đa dạng này, ứng dụng của bạn phải hỗ trợ mọi kiểu dáng thiết bị và kích thước màn hình.

Android 16 (cấp độ API 36) cho phép ứng dụng thích ứng với nhiều kiểu dáng và kích thước hiển thị bằng cách ghi đè các quy tắc hạn chế của ứng dụng đối với hướng màn hình, tỷ lệ khung hình và khả năng đổi kích thước. Các chế độ ghi đè áp dụng cho thiết bị có chiều rộng nhỏ nhất >= 600 dp, xác định như sau:

  • Máy tính bảng
  • Màn hình trong của thiết bị gập có màn hình lớn
  • Cửa sổ kiểu máy tính (trên mọi kiểu dáng)

Các ứng dụng nhắm đến cấp độ API mục tiêu 36 có thể đổi kích thước và có thể chuyển sang chế độ nhiều cửa sổ (tương đương với resizeableActivity="true") nếu chiều rộng nhỏ nhất của màn hình là >= 600 dp.

Ứng dụng bị hòm thư trên thiết bị màn hình lớn chưa mở trước Android 16, nhưng ở chế độ toàn màn hình khi nhắm đến Android 16. Ứng dụng hiển thị nhiều tin tức hơn khi ở chế độ toàn màn hình so với khi ở chế độ hòm thư.
Hình 1. Nguồn cấp tin tức dành cho nhà phát triển trước đây được đóng khung trên các thiết bị có màn hình lớn (bên trái) chạy ở chế độ toàn màn hình khi nhắm đến Android 16 (bên phải).

Android 16 thực thi một mô hình nhất quán về thiết kế ứng dụng thích ứng, giúp tối ưu hoá trải nghiệm người dùng bằng cách tôn trọng lựa chọn ưu tiên của người dùng về hướng thiết bị, tỷ lệ khung hình và kích thước hiển thị.

Các thay đổi

Các thuộc tính và API sau đây của tệp kê khai sẽ bị bỏ qua đối với các ứng dụng nhắm đến Android 16 (cấp độ API 36) trên màn hình lớn:

Thuộc tính hoặc API Giá trị bị bỏ qua
screenOrientation portrait, landscape, reversePortrait, reverseLandscape, sensorPortrait, sensorLandscape, userPortrait, userLandscape
resizeableActivity tất cả
minAspectRatio tất cả
maxAspectRatio tất cả
setRequestedOrientation()

getRequestedOrientation()
portrait, landscape, reversePortrait, reverseLandscape, sensorPortrait, sensorLandscape, userPortrait, userLandscape

Ngoại lệ

Các ngoại lệ đối với các thay đổi của Android 16 bao gồm:

  • Màn hình nhỏ hơn sw600dp (hầu hết điện thoại, thiết bị có thể gập lại và màn hình ngoài của thiết bị có thể gập lại có màn hình lớn)

  • Trò chơi, dựa trên cờ android:appCategory

    Xuất bản trò chơi bằng Android App Bundle và Tính năng ký ứng dụng của Play, cho phép Google Play quản lý cờ và tự động cung cấp các lợi ích của gói ứng dụng. Xem thêm bài viết Tổng quan về tệp kê khai ứng dụng.

  • Người dùng chọn tham gia hành vi mặc định của ứng dụng trong phần cài đặt tỷ lệ khung hình

Ngừng

Để chọn không sử dụng hành vi API cấp 36, hãy khai báo thuộc tính tệp kê khai PROPERTY_COMPAT_ALLOW_RESTRICTED_RESIZABILITY.

Để chọn không sử dụng một hoạt động cụ thể, hãy đặt thuộc tính trong phần tử <activity>:

<activity ...>
    <property
        android:name="android.window.PROPERTY_COMPAT_ALLOW_RESTRICTED_RESIZABILITY"
        android:value="true" />
    ...
</activity>

Để chọn không sử dụng cho toàn bộ ứng dụng, hãy đặt thuộc tính này trong phần tử <application>:

<application ...>
    <property
        android:name="android.window.PROPERTY_COMPAT_ALLOW_RESTRICTED_RESIZABILITY"
        android:value="true" />
    ...
</application>

Xét nghiệm

Để kiểm thử xem ứng dụng của bạn có bị ảnh hưởng bởi các thay đổi của Android 16 hay không, hãy sử dụng trình mô phỏng Pixel Tablet và Pixel Fold trong Android Studio, đồng thời đặt targetSdkPreview = "Baklava" trong tệp build.gradle của mô-đun ứng dụng.

Hoặc sử dụng khung tương thích của ứng dụng trên thiết bị kiểm thử bằng cách bật cờ UNIVERSAL_RESIZABLE_BY_DEFAULT (xem bài viết Công cụ khung tương thích).

Bạn có thể tự động hoá quá trình kiểm thử bằng khung kiểm thử Espresso và API kiểm thử Jetpack Compose.

Hướng dẫn triển khai

Các ứng dụng hạn chế hướng thiết bị, tỷ lệ khung hình hoặc khả năng đổi kích thước của ứng dụng có thể gặp vấn đề về màn hình trên Android 16, chẳng hạn như bố cục chồng chéo. Để mang lại trải nghiệm người dùng tối ưu trên điện thoại, thiết bị có thể gập lại, máy tính bảng, thiết bị ChromeOS và nhiều thiết bị khác, hãy tạo ứng dụng của bạn để có khả năng thích ứng và đáp ứng.

Danh sách kiểm tra về mức độ sẵn sàng

Sử dụng danh sách kiểm tra sau đây để đảm bảo ứng dụng của bạn đã sẵn sàng cho các thay đổi của Android 16:

  • Tránh các thành phần giao diện người dùng bị kéo giãn: Bố cục được thiết kế cho màn hình điện thoại tiêu chuẩn, màn hình dọc có thể không phù hợp với các tỷ lệ khung hình khác. Ví dụ: các thành phần giao diện người dùng lấp đầy toàn bộ chiều rộng của màn hình có thể bị kéo giãn ở hướng ngang. Thêm chiều rộng tối đa cho các thành phần để tránh bị kéo giãn.
  • Cho phép bố cục cuộn: Nếu bố cục không cuộn, người dùng có thể không truy cập được vào các nút hoặc các phần tử trên giao diện người dùng nằm ngoài màn hình ở hướng ngang. Cho phép bố cục ứng dụng cuộn để xác minh rằng tất cả nội dung đều có thể truy cập được bất kể chiều cao của màn hình.
  • Xác minh khả năng tương thích của camera ở chế độ dọc và ngang: Bản xem trước của kính ngắm camera giả định một tỷ lệ khung hình và hướng cụ thể so với cảm biến camera có thể dẫn đến bản xem trước bị kéo giãn hoặc lật trên màn hình không tuân thủ. Xác minh rằng kính ngắm xoay đúng cách khi hướng thay đổi. Cho phép kính ngắm điều chỉnh theo tỷ lệ khung hình của giao diện người dùng khác với tỷ lệ khung hình của cảm biến.
  • Duy trì trạng thái trong quá trình thay đổi kích thước cửa sổ: Việc xoá các quy tắc hạn chế về hướng và tỷ lệ khung hình có thể dẫn đến việc thay đổi kích thước cửa sổ ứng dụng thường xuyên để phản hồi cách người dùng muốn sử dụng ứng dụng, chẳng hạn như bằng cách xoay, gập hoặc mở thiết bị hoặc bằng cách đổi kích thước ứng dụng ở chế độ nhiều cửa sổ hoặc cửa sổ kiểu máy tính. Các thay đổi về cấu hình như thay đổi hướng và đổi kích thước cửa sổ sẽ khiến hoạt động được tạo lại (theo mặc định). Để giúp mang lại trải nghiệm người dùng tối ưu, hãy duy trì trạng thái ứng dụng để ứng dụng giữ lại dữ liệu (chẳng hạn như dữ liệu nhập biểu mẫu) và người dùng có thể duy trì ngữ cảnh.
  • Sử dụng các lớp kích thước cửa sổ: Hỗ trợ nhiều kích thước cửa sổ và tỷ lệ khung hình mà không cần tuỳ chỉnh riêng cho thiết bị. Giả sử kích thước cửa sổ sẽ thay đổi thường xuyên. Sử dụng các lớp kích thước cửa sổ để mô tả kích thước cửa sổ và sau đó áp dụng bố cục thích ứng phù hợp.
  • Tạo bố cục thích ứng: Trong các lớp kích thước cửa sổ, bố cục thích ứng sẽ điều chỉnh theo các thay đổi về kích thước màn hình để luôn tạo bản trình bày ứng dụng tối ưu.

Để có hướng dẫn thực hành về cách tạo bố cục thích ứng trong Compose, hãy xem lớp học lập trình Tạo ứng dụng thích ứng bằng Jetpack Compose. Nếu bạn đang di chuyển một ứng dụng sử dụng khung hiển thị, hãy xem bài viết Chiến lược áp dụng Compose.

Dòng thời gian

  • Android 16 (2025): Hỗ trợ mọi hướng và tỷ lệ khung hình cũng như khả năng đổi kích thước của ứng dụng là trải nghiệm cơ bản cho các thiết bị có màn hình lớn (chiều rộng màn hình nhỏ nhất >= 600 dp) đối với các ứng dụng nhắm đến cấp độ API mục tiêu 36. Tuy nhiên, nhà phát triển có thể chọn không tham gia.
Cấp độ API mục tiêu Thiết bị áp dụng Cho phép nhà phát triển chọn không tham gia
36 (Android 16) Thiết bị có màn hình lớn (chiều rộng màn hình nhỏ nhất >= 600 dp)

Thời hạn nhắm đến các cấp API cụ thể là dành riêng cho cửa hàng ứng dụng. Google Play sẽ yêu cầu các ứng dụng nhắm đến API cấp 36 kể từ tháng 8 năm 2026.

Tài nguyên khác