Android kích hoạt chế độ tương thích cho những ứng dụng khai báo các quy tắc hạn chế về hướng và khả năng đổi kích thước. Chế độ tương thích đảm bảo rằng ứng dụng có hành vi chấp nhận được trên các thiết bị màn hình lớn, nhưng lại có khả năng hữu dụng dưới mức tối ưu.
Tính năng Ghi đè cho mỗi ứng dụng cho phép nhà sản xuất thiết bị gốc (OEM) thay đổi hành vi của ứng dụng để cải thiện trải nghiệm người dùng hoặc ngăn ứng dụng gặp lỗi trên màn hình lớn.
Các vấn đề thường gặp về khả năng tương thích
Các ứng dụng thường gặp vấn đề về khả năng tương thích do các quy tắc hạn chế về hướng ứng dụng, các quy tắc hạn chế về khả năng đổi kích thước và tỷ lệ khung hình, việc xử lý không đúng cách hướng bản xem trước của máy ảnh cũng như các API bị sử dụng sai mục đích.
Hiệu ứng hòm thư
Hiệu ứng hòm thư đặt ứng dụng ở chính giữa màn hình hoặc trên màn hình lớn, sang một bên hoặc bên kia để dễ dàng truy cập. Hiệu ứng mờ (thanh có màu đồng nhất hoặc hình nền mờ) lấp đầy khu vực hiển thị chưa sử dụng dọc theo các cạnh hoặc ở đầu và cuối ứng dụng.
Hiệu ứng hòm thư thường diễn ra trên thiết bị có màn hình lớn do kích thước và tỷ lệ khung hình của màn hình thiết bị thường khác với kích thước và tỷ lệ khung hình của điện thoại tiêu chuẩn được thiết kế cho hầu hết các ứng dụng.

Hình 1. Ứng dụng bị hạn chế để chỉ hiển thị theo hướng dọc được tạo hiệu ứng hòm thư trên máy tính bảng xoay ngang và có thể gập lại.
Vấn đề
Do có hướng và tỷ lệ khung hình cố định hoặc không thể đổi kích thước, nên ứng dụng chỉ hỗ trợ một số cấu hình màn hình.
Dưới đây là các chế độ cài đặt cấu hình kiểm soát khả năng đổi kích thước và hướng ứng dụng:
screenOrientation
: Chọn một hướng cố định cho ứng dụng. Các ứng dụng cũng có thể đặt hướng trong thời gian chạy bằng cách dùngActivity#setRequestedOrientation()
.resizeableActivity
: Cho biết liệu hệ thống có thể đổi kích thước các ứng dụng cho vừa với nhiều kích thước cửa sổ hay không. Trên Android 11 (API cấp 30) trở xuống, hãy chỉ định xem ứng dụng có hỗ trợ chế độ nhiều cửa sổ hay không. Trên Android 12 (API cấp 31) trở lên, hãy chỉ định xem ứng dụng có hỗ trợ chế độ nhiều cửa sổ trên màn hình nhỏ (sw < 600 dp) hay không. Trên Android 12 trở lên, các ứng dụng hỗ trợ chế độ nhiều cửa sổ trên màn hình lớn (sw >= 600 dp) bất kể chế độ cài đặt này là gì.maxAspectRatio
: Chỉ định tỷ lệ khung hình tối đa mà ứng dụng hỗ trợ. Chỉ những ứng dụng cómaxAspectRatio
được đặt là false mới có thể đặtresizeableActivity
.minAspectRatio
: Chỉ định tỷ lệ khung hình tối thiểu mà ứng dụng hỗ trợ. Chỉ những ứng dụng cóminAspectRatio
được đặt là false mới có thể đặtresizeableActivity
.

Ứng dụng bị hạn chế để chỉ hiển thị theo hướng dọc không dùng được trên thiết bị xoay ngang.
Tối ưu hoá
Ứng dụng phải hỗ trợ tất cả các hướng cũng như kích thước của thiết bị và màn hình có chế độ nhiều cửa sổ. Gỡ bỏ mọi quy tắc hạn chế về hướng và tỷ lệ khung hình cố định khỏi bố cục ứng dụng cũng như tệp kê khai ứng dụng. Để biết thêm thông tin, hãy xem bài viết Hỗ trợ nhiều kích thước màn hình.

Ứng dụng hỗ trợ mọi hướng thiết bị.
Giải pháp về khả năng tương thích
Nếu một ứng dụng có hướng hoặc tỷ lệ khung hình cố định chạy trong một cửa sổ mà ứng dụng đó không trực tiếp hỗ trợ hướng hoặc kích thước cửa sổ, thì Android sẽ tạo hiệu ứng hòm thư để duy trì sự hoạt động liên tục của ứng dụng đó.
Kể từ Android 12 (API cấp 31) và tiếp tục với 12L (API cấp 32), nền tảng này sẽ áp dụng nhiều tính năng nâng cao cho các ứng dụng dạng hòm thư. Nhà sản xuất thiết bị sẽ triển khai các tính năng nâng cao cho giao diện người dùng. Do vậy, bạn không cần phát triển thêm bất kỳ tính năng nào cho ứng dụng để hưởng lợi từ những tính năng nâng cao này.
Android 12 (API cấp 31) ra mắt các tính năng nâng cao mang tính thẩm mỹ mà nhà sản xuất thiết bị có thể định cấu hình, đó là:
- Góc bo tròn: Các góc của cửa sổ ứng dụng có giao diện tinh tế hơn.
- Độ trong suốt của thanh hệ thống: Các thanh trạng thái và thanh điều hướng phủ trên ứng dụng có dạng bán trong suốt, làm cho các biểu tượng trên thanh luôn có thể xem được trên nền hòm thư.
- Tỷ lệ khung hình có thể định cấu hình: Bạn có thể điều chỉnh tỷ lệ khung hình của ứng dụng để cải thiện giao diện của ứng dụng.

Hình 2. Ứng dụng dạng hòm thư có các tính năng nâng cao cho giao diện người dùng.
12L (API cấp 32) bổ sung một số điểm cải tiến về chức năng như sau:
- Vị trí có thể định cấu hình: Trên màn hình lớn, nhà sản xuất thiết bị có thể đặt ứng dụng ở bên trái hoặc bên phải màn hình, giúp quá trình tương tác dễ dàng hơn.
- Nút khởi động lại được thiết kế lại: Nhà sản xuất thiết bị có thể mang đến diện mạo mới cho nút khởi động lại trong chế độ tương thích với kích thước để giúp người dùng dễ nhận ra hơn.
Android 13 (API cấp 33) bổ sung một hộp thoại hướng dẫn người dùng về cách định vị ứng dụng dạng hòm thư trên màn hình hoặc cách thêm hòm thư ở chế độ chia đôi màn hình:

Hình 3. Ứng dụng dạng hòm thư có hộp thoại hướng dẫn người dùng.
Chế độ tương thích với kích thước
Chế độ tương thích với kích thước là hiệu ứng hòm thư có chứa nút điều khiển khởi động lại. Với nút điều khiển này, người dùng có thể khởi động lại ứng dụng và vẽ lại màn hình. Android gọi chế độ tương thích với kích thước cho các ứng dụng được xác định là không thể đổi kích thước. Khi một hoạt động chuyển sang một vùng chứa màn hình có kích thước không tương thích, hệ thống có thể điều chỉnh kích thước của ứng dụng để lấp đầy màn hình thiết bị theo ít nhất một kích thước.
Dưới đây là các thay đổi về cấu hình thiết bị có thể kích hoạt chế độ tương thích với kích thước:
- Xoay thiết bị
- Gấp hoặc mở thiết bị có thể gập lại
- Thay đổi giữa chế độ hiển thị toàn màn hình và chế độ chia đôi màn hình
Vấn đề
Chế độ tương thích với kích thước thường áp dụng cho các hoạt động bị hạn chế theo hướng hoặc tỷ lệ khung hình và được định cấu hình (hoặc do hệ thống xác định) để không thể đổi kích thước.
Ứng dụng của bạn được xem là có thể đổi kích thước và sẽ không được đặt ở chế độ tương thích với kích thước nếu đáp ứng bất kỳ tiêu chí nào sau đây:
Có thể đổi kích thước bằng
resizeableActivity="true"
Hỗ trợ chế độ hình trong hình (PIP)
Có áp dụng chế độ ghi đè cho mỗi ứng dụng
FORCE_RESIZE_APP
(các thuộc tính do ứng dụng đặt sẽ bị bỏ qua)
Nếu không đáp ứng điều kiện nào, thì ứng dụng của bạn sẽ được xem là không thể đổi kích thước và có thể được đặt ở chế độ tương thích với kích thước.

Ứng dụng không thể đổi kích thước gặp sự cố ở chế độ nhiều cửa sổ.
Tối ưu hoá
Ứng dụng phải hỗ trợ mọi kích thước màn hình. Cho phép ứng dụng đổi kích thước bằng cách đặt thuộc tính android:resizeableActivity
của phần tử <activity>
hoặc <application>
thành true trong tệp kê khai ứng dụng. Thiết kế bố cục thích ứng cho ứng dụng. Để biết thêm thông tin, hãy xem bài viết Hỗ trợ nhiều kích thước màn hình và Hỗ trợ nhiều cửa sổ.

Ứng dụng hoạt động ở mọi kích thước cửa sổ.
Giải pháp về khả năng tương thích
Android đặt một ứng dụng vào chế độ tương thích với kích thước khi hệ thống xác định rằng màn hình của ứng dụng dạng hòm thư có thể cải thiện được bằng cách điều chỉnh kích thước của ứng dụng để lấp đầy cửa sổ hiển thị theo ít nhất một chiều. Hệ thống sẽ hiện một nút điều khiển khởi động lại để tạo lại quy trình của ứng dụng, hoạt động và vẽ lại màn hình. Xem thêm bài viết Tổng quan về quy trình và luồng.

Ứng dụng chỉ hiển thị theo hướng dọc, có dạng hòm thư theo hướng ngang, được điều chỉnh kích thước bằng nút điều khiển khởi động lại.
Vòng lặp nhấp nháy
Khi không hỗ trợ tất cả các hướng hiển thị, ứng dụng có thể liên tục yêu cầu hướng mới khi có thay đổi về cấu hình, tạo ra một vòng lặp vô hạn khiến màn hình nhấp nháy hoặc xoay liên tục.
Vấn đề
Trên Android 12 (API cấp 31) trở lên, nhà sản xuất thiết bị có thể định cấu hình thiết bị để bỏ qua các quy tắc hạn chế về hướng do ứng dụng chỉ định và sử dụng các quy tắc hạn chế để thúc đẩy chế độ tương thích. Ví dụ: một thiết bị có thể gập lại có thể bỏ qua chế độ cài đặt android:screenOrientation="portrait"
của một hoạt động khi hoạt động này xuất hiện trên màn hình bên trong xoay ngang, có kích thước máy tính bảng của thiết bị.
Nếu các quy tắc hạn chế về hướng của một ứng dụng bị bỏ qua, thì ứng dụng đó có thể được đặt hướng theo phương thức lập trình bằng cách gọi Activity#setRequestedOrientation()
. Lệnh gọi này kích hoạt quá trình khởi động lại một ứng dụng nếu ứng dụng này hiện không xử lý các thay đổi về cấu hình (xem bài viết Xử lý các thay đổi về cấu hình). Sau khi khởi động lại, các quy tắc hạn chế về hướng của ứng dụng lại bị bỏ qua, ứng dụng lặp lại lệnh gọi đến setRequestedOrientation()
. Lệnh gọi này kích hoạt quá trình khởi động lại ứng dụng, v.v. trong một vòng lặp tự duy trì.
Bạn có thể gặp phải vấn đề này theo cách khác, đó là khi hướng tự nhiên (hướng thông thường do Android xác định) của màn hình thiết bị là hướng ngang. Tức là lệnh gọi Display#getRotation()
sẽ trả về Surface.ROTATION_0
trong khi thiết bị có tỷ lệ khung hình ngang. Trước đây, các ứng dụng giả định rằng Display.getRotation() = Surface.ROTATION_0
có nghĩa là thiết bị ở hướng dọc. Tuy nhiên, điều này không phải lúc nào cũng đúng, ví dụ như trên màn hình bên trong của Pixel Fold và một số máy tính bảng.
Một ứng dụng ở hướng ngang trên màn hình bên trong của Pixel Fold, có thể kiểm tra chế độ xoay màn hình, nhận giá trị là ROTATION_0
, giả định hướng tự nhiên là dọc và gọi setRequestedOrientation(
ActivityInfo.SCREEN_ORIENTATION_PORTRAIT
)
. Sau khi khởi động lại (ở hướng ngang), ứng dụng này có thể kiểm tra lại chế độ xoay màn hình, nhận giá trị là ROTATION_0
, gọi setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT)
, v.v. trong một vòng lặp vô hạn.

Ứng dụng chỉ hiển thị theo hướng ngang trên màn hình dọc thực hiện các lệnh gọi lặp lại đến Activity#setRequestedOrientation()
.
Tối ưu hoá
Ứng dụng không nên làm những việc sau:
- Đặt hướng mặc định bằng
Activity#setRequestedOrientation()
trong phương thứconCreate()
của hoạt động vì các thay đổi về cấu hình chưa được xử lý có thể kích hoạt đột ngột yêu cầu liên quan đến hướng - Giả sử hướng tự nhiên (
ROTATION_0
) của thiết bị là hướng dọc - Đặt hướng dựa trên các tín hiệu không liên quan đến kích thước cửa sổ hiện tại, chẳng hạn như
Display#getRotation()
, sự hiện diện củaFoldingFeature
hoặc API không dùng nữa (xem bên dưới).

Ứng dụng xử lý thay đổi về cấu hình, không có quy tắc hạn chế về hướng nên không chuyển sang vòng lặp nhấp nháy.
Giải pháp về khả năng tương thích
Android bỏ qua các lệnh gọi đến Activity#setRequestedOrientation()
trong những trường hợp sau:
Hoạt động này đã chạy lại từ một lệnh gọi phương thức trước đó hoặc quá trình xử lý tính năng buộc xoay tương thích với máy ảnh đã được bật (xem phần Bản xem trước của máy ảnh ở bên dưới).
OEM có thể áp dụng hành vi này cho một ứng dụng bằng
OVERRIDE_ENABLE_COMPAT_IGNORE_REQUESTED_ORIENTATION
.Hoạt động này đã thực hiện hơn 2 yêu cầu liên quan đến hướng trong một giây, điều này cho thấy một vòng lặp đã xảy ra. Trong 2 yêu cầu trong vòng lặp này, Android sử dụng một yêu cầu nhằm tối đa hoá khu vực hiển thị ứng dụng.
OEM có thể áp dụng hành vi này cho một ứng dụng bằng
OVERRIDE_ENABLE_COMPAT_IGNORE_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED
.
Bản xem trước của máy ảnh
Bản xem trước của máy ảnh (hoặc kính ngắm) của các ứng dụng máy ảnh có thể bị lệch hoặc méo trên máy tính bảng, máy tính xách tay và màn hình có thể gập lại.
Vấn đề
Theo Định nghĩa về khả năng tương thích với Android, bạn "PHẢI định hướng cảm biến hình ảnh của máy ảnh để chiều dài của máy ảnh phù hợp với chiều dài của màn hình".
Các ứng dụng thường giả định rằng hướng thiết bị và hướng cảm biến của máy ảnh là hướng dọc — một giả định hợp lý trên điện thoại di động tiêu chuẩn. Tuy nhiên, hướng tự nhiên của máy tính bảng, máy tính xách tay và cảm biến của máy ảnh có thể là hướng ngang. Ngoài ra, các kiểu dáng mới như thiết bị có thể gập lại có thể có nhiều hướng tự nhiên và nhiều cảm biến của máy ảnh ở các hướng khác nhau.
Thao tác khởi động một hoạt động có hướng máy ảnh mà ứng dụng không mong đợi hoặc thao tác chuyển đổi giữa nhiều máy ảnh hoặc màn hình của thiết bị (đối với thiết bị có thể gập lại) có thể khiến bản xem trước của máy ảnh bị lệch hoặc méo.

Bản xem trước của máy ảnh bị lệch và méo trên màn hình lớn có thể gập lại.
Tối ưu hoá
Ứng dụng máy ảnh phải xác định và quản lý chính xác hướng thiết bị cũng như hướng cảm biến của máy ảnh để hiển thị đúng cách bản xem trước của máy ảnh được căn chỉnh và điều chỉnh theo tỷ lệ. Ứng dụng phải tính toán hướng xoay thiết bị, hướng xoay cảm biến và tỷ lệ khung hình của màn hình hoặc cửa sổ, sau đó áp dụng kết quả cho bản xem trước của máy ảnh. Để được hướng dẫn chi tiết, hãy xem bài viết Bản xem trước của máy ảnh và Giới thiệu về kính ngắm của máy ảnh.

Bản xem trước của máy ảnh được căn chỉnh và điều chỉnh theo tỷ lệ một cách chính xác ở mọi hướng thiết bị.
Giải pháp về khả năng tương thích
Một thiết bị ở hướng tự nhiên khi Display#getRotation()
trả về Surface.ROTATION_0
. Hệ thống sẽ tính CameraCharacteristics.SENSOR_ORIENTATION
theo hướng tự nhiên của thiết bị này. Android sẽ căn chỉnh cửa sổ dọc của các ứng dụng bị hạn chế để chỉ hiển thị theo hướng dọc với hướng tự nhiên của thiết bị này, đây là điều mà hầu hết các ứng dụng đều mong đợi. Android cũng cắt hình ảnh cảm biến của máy ảnh khi hướng cảm biến ở chế độ ngang và bản xem trước của máy ảnh ở chế độ dọc. Dưới đây là các giải pháp cụ thể:
Buộc xoay bản xem trước của máy ảnh cho ứng dụng bị hạn chế để chỉ hiển thị theo hướng dọc: Ứng dụng bị hạn chế để chỉ hiển thị theo hướng dọc sẽ mong đợi hướng tự nhiên của thiết bị và hướng cảm biến của máy ảnh là hướng dọc. Tuy nhiên, trên Android 12 (API cấp 31) trở lên, ứng dụng có thể chạy ở nhiều hướng thiết bị nếu nhà sản xuất thiết bị bỏ qua thông số kỹ thuật của hướng.
Khi một ứng dụng bị hạn chế để chỉ hiển thị theo hướng dọc được kết nối với máy ảnh, Android sẽ buộc xoay ứng dụng này để căn chỉnh cửa sổ dọc của ứng dụng với hướng tự nhiên của thiết bị.
Trên Pixel Tablet, cửa sổ dọc của ứng dụng được xoay sang chế độ dọc toàn màn hình cho phù hợp với hướng tự nhiên của thiết bị. Ứng dụng sẽ chiếm toàn màn hình sau khi buộc xoay.
Pixel Tablet — Buộc xoay ứng dụng bị hạn chế để chỉ hiển thị theo hướng dọc.
Trên màn hình bên trong của Pixel Fold, các hoạt động chỉ hiển thị theo hướng dọc sẽ được xoay thành hướng ngang cho phù hợp với hướng tự nhiên khi mở. Ứng dụng sẽ ở dạng hòm thư sau khi buộc xoay.
Pixel Fold — Buộc xoay ứng dụng bị hạn chế để chỉ hiển thị theo hướng dọc. Ứng dụng cũng ở dạng hòm thư.
Cắt máy ảnh trong phía trước: Cảm biến máy ảnh trong phía trước trên Pixel Fold ở hướng ngang. Ngoài việc buộc xoay bản xem trước của máy ảnh trên màn hình bên trong của Pixel Fold, Android còn cắt trường nhìn của máy ảnh bên trong phía trước (hướng ngang) để cảm biến chụp một khung hình đối diện với hướng thiết bị.
Buộc làm mới bản xem trước của máy ảnh: Hệ thống quay vòng qua các phương thức hoạt động là
onStop()
vàonStart()
(theo mặc định) hoặconPause()
vàonResume()
(được áp dụng bằng chế độ ghi đè cho mỗi ứng dụng OVERRIDE_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE) sau khi buộc xoay để đảm bảo bản xem trước của máy ảnh được hiện đúng cách.Điều chỉnh tỷ lệ khung hình: Hệ thống tự động thay đổi tỷ lệ khung hình của bản xem trước của máy ảnh đã buộc xoay thành tỷ lệ khung hình tối thiểu cao hơn để đảm bảo bản xem trước của máy ảnh được điều chỉnh theo tỷ lệ một cách chính xác.
Nhà phát triển ứng dụng có thể ghi đè các giải pháp này nếu ứng dụng xử lý bản xem trước của máy ảnh đúng cách. Hãy xem phần Ghi đè cho mỗi ứng dụng ở bên dưới.
Những API thường bị sử dụng sai mục đích
Vì Android đã tăng cường hỗ trợ cho các tính năng như chế độ nhiều cửa sổ và các thiết bị như thiết bị có thể gập lại, nên các API cũ không được dùng nữa và được thay thế bằng các API mới nhất, phù hợp với mọi kích thước màn hình và kiểu dáng thiết bị. Tuy nhiên, các API không dùng nữa vẫn hoạt động vì lý do tương thích ngược.
Một số API View
được thiết kế cho các mục đích đặc biệt mà không phải lúc nào nhà phát triển cũng hiểu rõ.
Vấn đề
Nhà phát triển tiếp tục sử dụng các API Display
không dùng nữa và giả định không chính xác rằng các API này trả về giới hạn đối với ứng dụng thay vì giới hạn đối với khu vực hiển thị của thiết bị. Ngoài ra, nhà phát triển sử dụng nhầm API Khung hiển thị dùng cho mục đích đặc biệt để lấy chỉ số hiển thị chung. Kết quả là tính toán nhầm khi định vị lại các phần tử trên giao diện người dùng sau sự kiện đổi kích thước cửa sổ ứng dụng, gây ra vấn đề về bố cục.
Những API Hiển thị không dùng nữa và thường bị sử dụng sai mục đích:
Để biết thêm thông tin, hãy xem bài viết Hỗ trợ nhiều cửa sổ.
Những API Khung hiển thị bị sử dụng sai mục đích:

API không dùng nữa tính toán nhầm giới hạn đối với ứng dụng. Nội dung ứng dụng bị lệch ra khỏi màn hình.
Tối ưu hoá
Tuyệt đối không dựa vào kích thước màn hình thực tế để định vị các phần tử trên giao diện người dùng. Di chuyển ứng dụng của bạn sang các API dựa trên WindowMetrics
, bao gồm cả các API WindowManager
sau đây:
- Nền tảng:
- Jetpack:

API tính toán chính xác các chỉ số của cửa sổ ứng dụng.
Giải pháp về khả năng tương thích
2 chế độ ghi đè sẽ điều chỉnh các API Display
không dùng nữa và API View
bị sử dụng sai mục đích để trả về giới hạn đối với ứng dụng: ALWAYS_SANDBOX_DISPLAY_APIS
cho API Display
; OVERRIDE_SANDBOX_VIEW_BOUNDS_APIS
cho API View
. Theo mặc định, ALWAYS_SANDBOX_DISPLAY_APIS
cũng được áp dụng cho các ứng dụng đủ điều kiện dùng chế độ tương thích với kích thước.
Hoạt động rõ
Hoạt động rõ là kết quả của các kiểu nền trong suốt, ví dụ:
<style name="Transparent" parent="AppTheme">
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowBackground">@android:color/transparent</item>
</style>
Các giao diện liên quan đến hộp thoại (chẳng hạn như Theme.Material.Dialog
) có thể bao gồm các kiểu giúp hoạt động trở nên rõ.
Các hoạt động rõ không bao gồm mọi không gian hiển thị có sẵn. Điều này khiến khó xử lý trên màn hình lớn vì khu vực hiển thị có sẵn có thể thay đổi theo các thay đổi về cấu hình như xoay thiết bị, gập và mở thiết bị cũng như chế độ nhiều cửa sổ.
Vấn đề
Trên màn hình lớn, một hoạt động rõ cần tuân theo các giới hạn của hoạt động mờ đầu tiên bên dưới hoạt động rõ trong ngăn xếp hoạt động của nhiệm vụ. Tuy nhiên, một hoạt động mờ chạy một hộp thoại cấp quyền có thể là hoạt động đàn hồi (chạy các hoạt động khác). Hoạt động mờ này sẽ biến mất sau khi chạy hộp thoại nên hệ thống không xác định được giới hạn của hoạt động mờ này bên dưới hoạt động rõ.

Hộp thoại bị đặt sai vị trí do hoạt động khởi chạy rõ (đàn hồi).
Tối ưu hoá
Các hoạt động rõ kế thừa những quy tắc hạn chế của chúng từ hoạt động mờ nhất trên cùng bên dưới chúng trong ngăn xếp hoạt động của một nhiệm vụ. Hoạt động mờ phải được cung cấp cho toàn bộ vòng đời của hoạt động rõ, từ quy trình tạo hoạt động cho đến huỷ bỏ. Vì lý do này, bạn không nên chạy các yêu cầu quyền từ hoạt động đàn hồi.
Nếu một hoạt động đàn hồi chạy một yêu cầu quyền, thì người dùng có thể không thấy hộp thoại cấp quyền vì hoạt động đàn hồi này đã bị huỷ bỏ trước khi người dùng có cơ hội phản hồi hộp thoại đó.
Ứng dụng nên chạy các yêu cầu quyền từ những hoạt động mà người dùng vẫn nhìn thấy cho đến khi họ đưa ra quyết định cấp quyền.
Góc bo tròn
Một hoạt động có thể được làm rõ bằng giao diện rõ hoặc không lấp đầy không gian hiển thị có sẵn. Nếu một hoạt động rõ lấp đầy không gian hiển thị có sẵn, thì hệ thống sẽ tự động áp dụng các góc bo tròn cho hoạt động này nếu nhà sản xuất thiết bị định cấu hình làm như vậy. Tuy nhiên, nếu một hoạt động rõ (như hộp thoại cấp quyền) không lấp đầy không gian có sẵn, thì bạn có quyền quyết định xem có áp dụng các góc bo tròn hay không.
Hộp thoại cấp quyền không lấp đầy không gian hiển thị có sẵn vì bố cục hộp thoại thường dùng LayoutParams.WRAP_CONTENT thay vì LayoutParams.MATCH_PARENT.

Hộp thoại được định vị chính xác trên hoạt động chạy có thể nhìn thấy với các góc bo tròn.
Giải pháp về khả năng tương thích
Duy trì hiển thị các hoạt động chạy hoạt động của hộp thoại cho đến khi người dùng phản hồi hộp thoại đó.
Hệ thống đảm bảo rằng một hoạt động rõ kế thừa tất cả các quy tắc hạn chế của hoạt động mờ đầu tiên bên dưới hoạt động rõ trong ngăn xếp hoạt động, bao gồm cả các quy tắc hạn chế liên quan đến:
- Chế độ tương thích với kích thước
- Hướng
- Tỷ lệ khung hình
Trò chơi viết bằng Unity
Các trò chơi viết bằng Unity chạy trên toàn màn hình Android hoặc ở chế độ nhiều cửa sổ. Tuy nhiên, nhiều trò chơi viết bằng Unity bị mất tiêu điểm và dừng vẽ nội dung khi ứng dụng được đặt ở chế độ nhiều cửa sổ.
Vấn đề
Unity đã thêm một lựa chọn Resizable Window
để hỗ trợ chế độ nhiều cửa sổ trên Android kể từ Unity 2019.4. Tuy nhiên, cách triển khai ban đầu đã phản ứng không đúng cách với vòng đời hoạt động ở chế độ nhiều cửa sổ, khiến UnityPlayer tạm ngưng phát lại khi ứng dụng mất tiêu điểm. Người chơi nhìn thấy một màn hình đen hoặc khung hình cuối cùng của trò chơi bị treo. Trò chơi chỉ được tiếp tục khi người dùng nhấn vào màn hình. Nhiều ứng dụng dùng công cụ Unity gặp phải vấn đề này và hiển thị dưới dạng một cửa sổ màu đen ở chế độ nhiều cửa sổ.

Trò chơi mất tiêu điểm ở chế độ nhiều cửa sổ và hiển thị dưới dạng một cửa sổ màu đen.
Tối ưu hoá
Nâng cấp Unity lên 2019.4.40 trở lên rồi xuất lại trò chơi của bạn. Giữ nguyên lựa chọn Resizable Window
trong phần cài đặt Android Player, nếu không trò chơi sẽ tạm dừng khi không được đặt tiêu điểm mặc dù trò chơi hoàn toàn hiển thị ở chế độ nhiều cửa sổ.

Trò chơi duy trì tiêu điểm ở chế độ nhiều cửa sổ và hiển thị nội dung trong cửa sổ.
Giải pháp về khả năng tương thích
OEM có thể áp dụng chế độ ghi đè cho mỗi ứng dụng OVERRIDE_ENABLE_COMPAT_FAKE_FOCUS
để cung cấp sự kiện lấy tiêu điểm giả cho một ứng dụng ở chế độ nhiều cửa sổ. Tính năng ghi đè này cho phép hoạt động vẽ lại nội dung và không bị bôi đen.
Kiểm thử ứng dụng để tìm vấn đề về khả năng tương thích
Để kiểm thử ứng dụng của bạn và hiểu cách ứng dụng hoạt động trên nhiều kiểu dáng, hãy tận dụng các tài nguyên sau đây:
- Phát trực tuyến trên thiết bị: Để kiểm thử ứng dụng của bạn trên các thiết bị phát hành chính thức (bao gồm cả Pixel Tablet và Pixel Fold) được lưu trữ trong các trung tâm dữ liệu của Google, hãy xem bài viết Phát trực tuyến trên thiết bị Android từ Android Studio
- Trình mô phỏng Pixel Tablet và Pixel Fold trong Android Studio Hedgehog: Để biết thông tin về cách tạo trình mô phỏng cho Pixel Tablet và Pixel Fold, hãy xem bài viết Tạo và quản lý thiết bị ảo
- Trình mô phỏng có thể đổi kích thước của Android Studio: Để biết thông tin về cách truy cập vào thiết bị ảo, hãy xem bài viết Chạy ứng dụng trên Trình mô phỏng Android
Ghi đè cho mỗi ứng dụng
Android cung cấp chế độ ghi đè có thể thay đổi hành vi được định cấu hình của các ứng dụng. Ví dụ: chế độ ghi đè FORCE_RESIZE_APP
sẽ hướng dẫn hệ thống bỏ qua chế độ tương thích với kích thước ngay cả khi resizeableActivity="false"
được thiết lập trong tệp kê khai ứng dụng.
Nhà sản xuất thiết bị gốc sẽ áp dụng chế độ ghi đè cho mỗi ứng dụng trên các thiết bị cụ thể có màn hình lớn. Pixel Tablet và Pixel Fold sẽ áp dụng một số chế độ ghi đè cho nhiều ứng dụng theo mặc định.
Bạn có thể kiểm thử ứng dụng với các chế độ ghi đè được bật hoặc tắt bằng khung tương thích (xem bài viết Công cụ khung tương thích). Khi được bật, các chế độ ghi đè sẽ áp dụng cho toàn bộ ứng dụng.
Bạn cũng có thể dùng Cầu gỡ lỗi Android (adb) để bật hoặc tắt các chế độ ghi đè và xác định những chế độ ghi đè sẽ áp dụng cho ứng dụng của mình.
Bật hoặc tắt các chế độ ghi đè như sau:
adb shell am compat enable/disable <override name/id> <package>
Đối với Pixel Tablet và Pixel Fold, hãy kiểm tra xem chế độ ghi đè nào áp dụng cho ứng dụng của bạn:
adb shell dumpsys platform_compat | grep <package name>
Bảng sau đây liệt kê các chế độ ghi đè có sẵn cùng với hướng dẫn về cách tối ưu hoá ứng dụng để ứng dụng không cần dựa vào chế độ ghi đè. Bạn có thể thêm cờ thuộc tính vào tệp kê khai ứng dụng để chọn không sử dụng một số chế độ ghi đè.
Ghi đè cho mỗi ứng dụng | |||
---|---|---|---|
Loại | Tên | Mã nhận dạng | Nội dung mô tả |
Khả năng đổi kích thước | FORCE_RESIZE_APP | 174042936 | Bỏ qua chế độ tương thích với kích thước của ứng dụng khi thay đổi cấu hình. |
FORCE_NON_RESIZE_APP | 181136395 | Buộc ứng dụng chuyển vào chế độ tương thích với kích thước khi thay đổi cấu hình. | |
Tỷ lệ khung hình | OVERRIDE_MIN_ASPECT_RATIO | 174042980 | Chế độ ghi đè yếu tố giám sát phải được bật để áp dụng mọi chế độ ghi đè khác cho tỷ lệ khung hình. |
OVERRIDE_MIN_ASPECT_RATIO_PORTRAIT_ONLY | 203647190 | Nếu tuỳ chọn này được bật (mặc định), thì phạm vi ghi đè sẽ chỉ diễn ra đối với các hoạt động chỉ hiển thị theo hướng dọc. | |
OVERRIDE_MIN_ASPECT_RATIO_MEDIUM | 180326845 | Thay đổi tỷ lệ khung hình tối thiểu thành 3:2. | |
OVERRIDE_MIN_ASPECT_RATIO_LARGE | 180326787 | Thay đổi tỷ lệ khung hình tối thiểu thành 16:9. | |
OVERRIDE_MIN_ASPECT_RATIO_TO_ALIGN_WITH_SPLIT_SCREEN | 208648326 | Thay đổi tỷ lệ khung hình tối thiểu cho vừa 50% kích thước màn hình (hoặc tỷ lệ khung hình chia đôi màn hình). | |
OVERRIDE_MIN_ASPECT_RATIO_EXCLUDE_PORTRAIT_FULLSCREEN | 218959984 | Tắt chế độ ghi đè tỷ lệ khung hình tối thiểu để các ứng dụng hiển thị ở chế độ toàn màn hình khi thiết bị xoay dọc. | |
Hướng | OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT | 265452344 | Ghi đè hướng thành hướng dọc khi một hoạt động có hướng không xác định. |
OVERRIDE_UNDEFINED_ORIENTATION_TO_NOSENSOR | 265451093 | Ghi đè hướng thành nosensor (sử dụng hướng tự nhiên của thiết bị) khi một hoạt động có hướng không xác định. |
|
OVERRIDE_LANDSCAPE_ORIENTATION_TO_REVERSE_LANDSCAPE | 266124927 | Xoay 180 độ các ứng dụng chỉ hiển thị theo hướng ngang. | |
OVERRIDE_ANY_ORIENTATION | 265464455 | Cho phép ghi đè mọi hướng. | |
OVERRIDE_ORIENTATION_ONLY_FOR_CAMERA | 265456536 | Giới hạn phạm vi ghi đè hướng ở thời điểm ứng dụng được kết nối với máy ảnh. | |
OVERRIDE_USE_DISPLAY_LANDSCAPE_NATURAL_ORIENTATION | 255940284 | Đặt màn hình thành hướng ngang tự nhiên cố định khi một nhiệm vụ ở chế độ toàn màn hình (kể cả khi ở dạng hòm thư). | |
OVERRIDE_ENABLE_COMPAT_IGNORE_REQUESTED_ORIENTATION | 254631730 | Bỏ qua các yêu cầu về hướng của ứng dụng để tránh vòng lặp xoay. | |
OVERRIDE_ENABLE_COMPAT_IGNORE_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED | 273509367 | Bỏ qua các yêu cầu về hướng lặp lại trong khi một hoạt động đang chạy lại. Nếu Android phát hiện thấy một ứng dụng đang yêu cầu ít nhất 2 hướng mới trong vòng 1 giây, thì hệ thống sẽ coi đây là vòng lặp xoay và áp dụng chế độ ghi đè. | |
OVERRIDE_RESPECT_REQUESTED_ORIENTATION | 236283604 | Ngăn hiệu ứng hòm thư bằng cách tắt chế độ cài đặt bỏ qua yêu cầu về hướng của OEM. | |
Sandbox API | NEVER_SANDBOX_DISPLAY_APIS | 184838306 | Ngăn chặn sự thay đổi về hành vi của mọi API hiển thị. |
ALWAYS_SANDBOX_DISPLAY_APIS | 185004937 | Buộc các API Display trong ứng dụng trả về giới hạn đối với ứng dụng. API Hiển thị trả về các giới hạn đối với khu vực hiển thị nhưng đôi khi, ứng dụng giả định các giới hạn đối với ứng dụng trả về API Hiển thị, dẫn đến các vấn đề liên quan đến giao diện người dùng. |
|
OVERRIDE_SANDBOX_VIEW_BOUNDS_APIS | 237531167 | Buộc dùng các API View trong ứng dụng để trả về giới hạn đối với ứng dụng. API Khung hiển thị trả về giới hạn đối với khu vực hiển thị, nhưng đôi khi ứng dụng giả định rằng API Khung hiển thị trả về giới hạn đối với ứng dụng, dẫn đến các vấn đề liên quan đến giao diện người dùng. |
|
Khả năng tương thích với máy ảnh | OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION | 263959004 | Tắt tính năng buộc xoay. Theo mặc định, tất cả các ứng dụng máy ảnh có hướng cố định sẽ bị buộc xoay khi bản xem trước của máy ảnh đang mở. |
OVERRIDE_CAMERA_COMPAT_DISABLE_REFRESH | 264304459 | Xoá chế độ làm mới hoàn toàn mặc định được áp dụng khi bản xem trước của máy ảnh bị buộc xoay. | |
OVERRIDE_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE | 264301586 | Chuyển quy trình làm mới hoàn toàn sang làm mới một phần khi bản xem trước của máy ảnh bị buộc xoay, giúp duy trì trạng thái trong khi buộc xoay. Theo mặc định, Android áp dụng một quy trình làm mới hoàn toàn khi bản xem trước của máy ảnh bị buộc xoay. Quá trình làm mới hoàn toàn có thể gây ra vấn đề khiến một số ứng dụng mất trạng thái hoặc bôi đen, tuỳ thuộc vào cách ứng dụng lưu trạng thái trước đó vào bộ nhớ đệm. | |
OVERRIDE_CAMERA_LANDSCAPE_TO_PORTRAIT | 250678880 | Cắt vùng đệm hình ảnh của máy ảnh bên trong phía trước. Nếu chế độ ghi đè bị tắt, thì tính năng cắt của máy ảnh bên trong phía trước sẽ bị xoá và trường nhìn của bản xem trước của máy ảnh sẽ tăng lên. Theo mặc định trên Pixel Fold, hệ thống sẽ cắt bản xem trước của tất cả các ứng dụng máy ảnh khi dùng máy ảnh bên trong phía trước. | |
Khác | OVERRIDE_ENABLE_COMPAT_FAKE_FOCUS | 263259275 | Ngăn ứng dụng bị bôi đen khi ứng dụng bị mất tiêu điểm ở chế độ chia đôi màn hình. Ứng dụng sẽ chờ để có tiêu điểm trước khi vẽ nội dung ứng dụng. Điều này có thể khiến ứng dụng bị treo hoặc bị bôi đen. Chế độ ghi đè này cho phép Android gửi một sự kiện tiêu điểm giả cho ứng dụng. Sự kiện này sẽ báo hiệu cho ứng dụng để bắt đầu vẽ lại nội dung. |
FORCE_RESIZE_APP
Buộc các gói được áp dụng chế độ ghi đè phải có thể đổi kích thước. Không thay đổi việc ứng dụng có thể được đặt ở chế độ nhiều cửa sổ hay không, nhưng cho phép ứng dụng đổi kích thước mà không phải chuyển sang chế độ tương thích với kích thước khi màn hình đổi kích thước.
Cách ứng dụng có thể đạt được kết quả tương tự như ghi đè
Đặt thuộc tính android:resizeableActivity
thành true hoặc đặt cờ siêu dữ liệu android.supports_size_changes
thành true (để hỗ trợ quá trình đổi kích thước trong khi tắt chế độ nhiều cửa sổ với android:resizeableActivity
được đặt thành false) trong tệp kê khai ứng dụng.
Cách tối ưu hoá ứng dụng
Sử dụng các bố cục thích ứng để cho phép ứng dụng thích ứng với mọi kích thước hiển thị và tỷ lệ khung hình. Hãy xem bài viết Hỗ trợ nhiều kích thước màn hình.
Cách tắt hoặc chọn không sử dụng chế độ ghi đè
Làm cho ứng dụng có thể đổi kích thước hoàn toàn hoặc liên hệ với nhóm Quan hệ với nhà phát triển Android để tắt chế độ ghi đè.
Cờ thuộc tính để điều chỉnh chế độ ghi đè
Không có. Làm cho ứng dụng có thể đổi kích thước.
Lệnh adb để kiểm thử chế độ ghi đè
Cách áp dụng chế độ ghi đè và làm cho ứng dụng có thể đổi kích thước:
adb shell am compat enable FORCE_RESIZE_APP <package>
Cách xoá chế độ ghi đè:
adb shell am compat disable FORCE_RESIZE_APP <package>
Lưu ý: Các lệnh chỉ tạm thời áp dụng hoặc xoá chế độ ghi đè.
FORCE_NON_RESIZE_APP
Buộc các gói được áp dụng chế độ ghi đè phải có thể đổi kích thước và chuyển sang chế độ tương thích khi thay đổi cấu hình.
Cách ứng dụng có thể đạt được kết quả tương tự như ghi đè
Đặt cả thuộc tính android:resizeableActivity
và cờ siêu dữ liệu android.supports_size_changes
thành false trong tệp kê khai ứng dụng rồi khai báo một quy tắc hạn chế hướng hoặc tỷ lệ khung hình.
Cách tối ưu hoá ứng dụng
Để tất cả các ứng dụng hoạt động tốt nếu được đổi kích thước, bạn phải đặt android:resizeableActivity
hoặc android.supports_size_changes
thành true. Bạn phải cải thiện các ứng dụng khác để chúng hoạt động tốt khi được đổi kích thước. Hãy xem android:resizeableActivity.
Cách tắt hoặc chọn không sử dụng chế độ ghi đè
Không chọn không sử dụng. Hãy liên hệ với nhóm Quan hệ với nhà phát triển Android để tắt chế độ ghi đè.
Cờ thuộc tính để điều chỉnh chế độ ghi đè
Không có.
Lệnh adb để kiểm thử chế độ ghi đè
Cách áp dụng chế độ ghi đè và làm cho ứng dụng không thể đổi kích thước:
adb shell am compat enable FORCE_NON_RESIZE_APP <package>
Cách xoá chế độ ghi đè:
adb shell am compat disable FORCE_NON_RESIZE_APP <package>
Lưu ý: Các lệnh chỉ tạm thời áp dụng hoặc xoá chế độ ghi đè.
OVERRIDE_MIN_ASPECT_RATIO
Yếu tố giám sát tất cả các chế độ xử lý buộc có một tỷ lệ khung hình tối thiểu nhất định.
Cách ứng dụng có thể đạt được kết quả tương tự như ghi đè
Đặt android:minAspectRatio
ở cấp hoạt động hoặc cấp ứng dụng.
Cách tối ưu hoá ứng dụng
Bạn không nên đặt các quy tắc hạn chế tỷ lệ khung hình trong ứng dụng. Hãy đảm bảo ứng dụng hỗ trợ nhiều kích thước màn hình. Sử dụng các lớp kích thước cửa sổ để hỗ trợ nhiều bố cục dựa trên lượng không gian mà ứng dụng có trên màn hình. Xem API WindowSizeClass
cho Compose và Xem API WindowSizeClass
.
Cách tắt hoặc chọn không sử dụng chế độ ghi đè
Không chọn không sử dụng. Hãy liên hệ với nhóm Quan hệ với nhà phát triển Android để tắt chế độ ghi đè.
Cờ thuộc tính để điều chỉnh chế độ ghi đè
Không có. Hãy chỉ định tỷ lệ khung hình tối thiểu.
Lệnh adb để kiểm thử chế độ ghi đè
Cách áp dụng chế độ ghi đè:
adb shell am compat enable OVERRIDE_MIN_ASPECT_RATIO <package>
Cách xoá chế độ ghi đè:
adb shell am compat disable OVERRIDE_MIN_ASPECT_RATIO <package>
Lưu ý: Các lệnh chỉ tạm thời áp dụng hoặc xoá chế độ ghi đè.
OVERRIDE_MIN_ASPECT_RATIO_PORTRAIT_ONLY
Hạn chế các chế độ xử lý buộc sử dụng một tỷ lệ khung hình tối thiểu nhất định cho các hoạt động chỉ dùng hướng dọc. Được bật theo mặc định và chỉ có hiệu lực nếu bạn cũng bật OVERRIDE_MIN_ASPECT_RATIO
.
Cách ứng dụng có thể đạt được kết quả tương tự như ghi đè
Xem OVERRIDE_MIN_ASPECT_RATIO.
Cách tối ưu hoá ứng dụng
Xem OVERRIDE_MIN_ASPECT_RATIO.
Cách tắt hoặc chọn không sử dụng chế độ ghi đè
Xem OVERRIDE_MIN_ASPECT_RATIO.
Cờ thuộc tính để điều chỉnh chế độ ghi đè
Xem OVERRIDE_MIN_ASPECT_RATIO.
Lệnh adb để kiểm thử chế độ ghi đè
Cách áp dụng chế độ ghi đè:
adb shell am compat enable OVERRIDE_MIN_ASPECT_RATIO_PORTRAIT_ONLY <package>
Cách xoá chế độ ghi đè:
adb shell am compat disable OVERRIDE_MIN_ASPECT_RATIO_PORTRAIT_ONLY <package>
Lưu ý: Các lệnh chỉ tạm thời áp dụng hoặc xoá chế độ ghi đè.
OVERRIDE_MIN_ASPECT_RATIO_MEDIUM
Đặt tỷ lệ khung hình tối thiểu của hoạt động thành một giá trị trung bình (3:2)
Cách ứng dụng có thể đạt được kết quả tương tự như ghi đè
Xem OVERRIDE_MIN_ASPECT_RATIO.
Cách tối ưu hoá ứng dụng
Xem OVERRIDE_MIN_ASPECT_RATIO.
Cách tắt hoặc chọn không sử dụng chế độ ghi đè
Xem OVERRIDE_MIN_ASPECT_RATIO.
Cờ thuộc tính để điều chỉnh chế độ ghi đè
Xem OVERRIDE_MIN_ASPECT_RATIO.
Lệnh adb để kiểm thử chế độ ghi đè
Cách áp dụng chế độ ghi đè:
adb shell am compat enable OVERRIDE_MIN_ASPECT_RATIO_MEDIUM <package>
Cách xoá chế độ ghi đè:
adb shell am compat disable OVERRIDE_MIN_ASPECT_RATIO_MEDIUM <package>
Lưu ý: Các lệnh chỉ tạm thời áp dụng hoặc xoá chế độ ghi đè.
OVERRIDE_MIN_ASPECT_RATIO_LARGE
Đặt tỷ lệ khung hình tối thiểu của hoạt động thành một giá trị lớn (16:9)
Cách ứng dụng có thể đạt được kết quả tương tự như ghi đè
Xem OVERRIDE_MIN_ASPECT_RATIO.
Cách tối ưu hoá ứng dụng
Xem OVERRIDE_MIN_ASPECT_RATIO.
Cách tắt hoặc chọn không sử dụng chế độ ghi đè
Xem OVERRIDE_MIN_ASPECT_RATIO.
Cờ thuộc tính để điều chỉnh chế độ ghi đè
Xem OVERRIDE_MIN_ASPECT_RATIO.
Lệnh adb để kiểm thử chế độ ghi đè
Cách áp dụng chế độ ghi đè:
adb shell am compat enable OVERRIDE_MIN_ASPECT_RATIO_LARGE <package>
Cách xoá chế độ ghi đè:
adb shell am compat disable OVERRIDE_MIN_ASPECT_RATIO_LARGE <package>`
Lưu ý: Các lệnh chỉ tạm thời áp dụng hoặc xoá chế độ ghi đè.
OVERRIDE_MIN_ASPECT_RATIO_TO_ALIGN_WITH_SPLIT_SCREEN
Cho phép sử dụng tỷ lệ khung hình chia đôi màn hình. Cho phép ứng dụng dùng tất cả không gian có sẵn ở chế độ chia đôi màn hình, tránh hiệu ứng hòm thư.
Cách ứng dụng có thể đạt được kết quả tương tự như ghi đè
Xem OVERRIDE_MIN_ASPECT_RATIO.
Cách tối ưu hoá ứng dụng
Xem OVERRIDE_MIN_ASPECT_RATIO.
Cách tắt hoặc chọn không sử dụng chế độ ghi đè
Xem OVERRIDE_MIN_ASPECT_RATIO.
Cờ thuộc tính để điều chỉnh chế độ ghi đè
Xem OVERRIDE_MIN_ASPECT_RATIO.
Lệnh adb để kiểm thử chế độ ghi đè
Cách áp dụng chế độ ghi đè:
adb shell am compat enable OVERRIDE_MIN_ASPECT_RATIO_TO_ALIGN_WITH_SPLIT_SCREEN <package>
Cách xoá chế độ ghi đè:
adb shell am compat disable OVERRIDE_MIN_ASPECT_RATIO_TO_ALIGN_WITH_SPLIT_SCREEN <package>
Lưu ý: Các lệnh chỉ tạm thời áp dụng hoặc xoá chế độ ghi đè.
OVERRIDE_MIN_ASPECT_RATIO_EXCLUDE_PORTRAIT_FULLSCREEN
Tắt chế độ ghi đè tỷ lệ khung hình tối thiểu ở chế độ toàn màn hình dọc để dùng tất cả không gian màn hình có sẵn.
Cách ứng dụng có thể đạt được kết quả tương tự như ghi đè
Xem OVERRIDE_MIN_ASPECT_RATIO.
Cách tối ưu hoá ứng dụng
Xem OVERRIDE_MIN_ASPECT_RATIO.
Cách tắt hoặc chọn không sử dụng chế độ ghi đè
Xem OVERRIDE_MIN_ASPECT_RATIO.
Cờ thuộc tính để điều chỉnh chế độ ghi đè
Xem OVERRIDE_MIN_ASPECT_RATIO.
Lệnh adb để kiểm thử chế độ ghi đè
Cách áp dụng chế độ ghi đè:
adb shell am compat enable OVERRIDE_MIN_ASPECT_RATIO_EXCLUDE_PORTRAIT_FULLSCREEN <package>
Cách xoá chế độ ghi đè:
adb shell am compat disable OVERRIDE_MIN_ASPECT_RATIO_EXCLUDE_PORTRAIT_FULLSCREEN <package>
Lưu ý: Các lệnh chỉ tạm thời áp dụng hoặc xoá chế độ ghi đè.
OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT
Bật hướng dọc cho tất cả các hoạt động trong gói. Trừ phi bạn bật OVERRIDE_ANY_ORIENTATION, chế độ ghi đè chỉ được dùng khi hoạt động không chỉ định hướng cố định nào khác.
Cách ứng dụng có thể đạt được kết quả tương tự như ghi đè
Hãy đặt thuộc tính tệp kê khai activity:screenOrientation
hoặc dùng API Activity#setRequestedOrientation
.
Cách tối ưu hoá ứng dụng
Ứng dụng của bạn phải hỗ trợ tất cả các hướng. Thay đổi về hướng là thay đổi về cấu hình, có thể được xử lý bằng một trong hai cách: cho phép hệ thống huỷ bỏ và tạo lại ứng dụng hoặc tự quản lý các thay đổi về cấu hình. Nếu tự quản lý các thay đổi về cấu hình, thì bạn có thể giữ lại trạng thái ứng dụng bằng ViewModel
. Trong rất ít trường hợp, bạn có thể quyết định chỉ khoá hướng trên màn hình nhỏ, mặc dù làm như vậy có thể không điều chỉnh được theo tỷ lệ cũng như không cho phép người dùng xoay ứng dụng khi cần. Trên Android 12L trở lên, bạn có thể ghi đè hướng cố định theo cấu hình thiết bị. Để biết thêm thông tin về cách xử lý các thay đổi về cấu hình và hỗ trợ tất cả các hướng, hãy xem các bài viết Xử lý các thay đổi về cấu hình, Tổng quan về ViewModel và Hướng ứng dụng bị hạn chế trên điện thoại nhưng không bị hạn chế trên các loại thiết bị có màn hình lớn.
Cách tắt hoặc chọn không sử dụng chế độ ghi đè
Thiết lập cờ thuộc tính PROPERTY_COMPAT_ALLOW_ORIENTATION_OVERRIDE
thành false.
Cờ thuộc tính để điều chỉnh chế độ ghi đè
<property android:name="android.window.PROPERTY_COMPAT_ALLOW_ORIENTATION_OVERRIDE"
android:value="true|false"/>
Lệnh adb để kiểm thử chế độ ghi đè
Cách áp dụng chế độ ghi đè:
adb shell am compat enable OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT <package>
Cách xoá chế độ ghi đè:
adb shell am compat disable OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT <package>
Lưu ý: Các lệnh chỉ tạm thời áp dụng hoặc xoá chế độ ghi đè.
OVERRIDE_UNDEFINED_ORIENTATION_TO_NOSENSOR
Bật hướng nosensor cho tất cả các hoạt động trong gói. Trừ phi bạn bật OVERRIDE_ANY_ORIENTATION, chế độ ghi đè chỉ được dùng khi hoạt động không chỉ định hướng cố định nào khác.
Cách ứng dụng có thể đạt được kết quả tương tự như ghi đè
Hãy đặt thuộc tính tệp kê khai activity:screenOrientation
hoặc dùng API Activity#setRequestedOrientation
.
Cách tối ưu hoá ứng dụng
Xem OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT
.
Cách tắt hoặc chọn không sử dụng chế độ ghi đè
Thiết lập cờ thuộc tính PROPERTY_COMPAT_ALLOW_ORIENTATION_OVERRIDE
thành false.
Cờ thuộc tính để điều chỉnh chế độ ghi đè
<property android:name="android.window.PROPERTY_COMPAT_ALLOW_ORIENTATION_OVERRIDE"
android:value="true|false"/>
Lệnh adb để kiểm thử chế độ ghi đè
Cách áp dụng chế độ ghi đè:
adb shell am compat enable OVERRIDE_UNDEFINED_ORIENTATION_TO_NOSENSOR <package>
Cách xoá chế độ ghi đè:
adb shell am compat disable OVERRIDE_UNDEFINED_ORIENTATION_TO_NOSENSOR <package>
Lưu ý: Các lệnh chỉ tạm thời áp dụng hoặc xoá chế độ ghi đè.
OVERRIDE_LANDSCAPE_ORIENTATION_TO_REVERSE_LANDSCAPE
Bật hướng reverseLandscape cho tất cả các hoạt động trong gói. Trừ phi bạn bật OVERRIDE_ANY_ORIENTATION, chế độ ghi đè chỉ được dùng khi hoạt động không chỉ định hướng cố định nào khác.
Cách ứng dụng có thể đạt được kết quả tương tự như ghi đè
Hãy đặt thuộc tính tệp kê khai activity:screenOrientation
hoặc dùng API Activity#setRequestedOrientation
.
Cách tối ưu hoá ứng dụng
Xem OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT
.
Cách tắt hoặc chọn không sử dụng chế độ ghi đè
Thiết lập cờ thuộc tính PROPERTY_COMPAT_ALLOW_ORIENTATION_OVERRIDE
thành false.
Cờ thuộc tính để điều chỉnh chế độ ghi đè
<property android:name="android.window.PROPERTY_COMPAT_ALLOW_ORIENTATION_OVERRIDE"
android:value="true|false"/>
Lệnh adb để kiểm thử chế độ ghi đè
Cách áp dụng chế độ ghi đè:
adb shell am compat enable OVERRIDE_LANDSCAPE_ORIENTATION_TO_REVERSE_LANDSCAPE <package>
Cách xoá chế độ ghi đè:
adb shell am compat disable OVERRIDE_LANDSCAPE_ORIENTATION_TO_REVERSE_LANDSCAPE <package>
Lưu ý: Các lệnh chỉ tạm thời áp dụng hoặc xoá chế độ ghi đè.
OVERRIDE_ANY_ORIENTATION
Cho phép các chế độ ghi đè OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT, OVERRIDE_UNDEFINED_ORIENTATION_TO_NOSENSOR và OVERRIDE_LANDSCAPE_ORIENTATION_TO_REVERSE_LANDSCAPE để ghi đè mọi hướng.
Cách ứng dụng có thể đạt được kết quả tương tự như ghi đè
Hãy đặt thuộc tính tệp kê khai activity:screenOrientation
hoặc dùng API Activity#setRequestedOrientation
.
Cách tối ưu hoá ứng dụng
Xem OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT
.
Cách tắt hoặc chọn không sử dụng chế độ ghi đè
Thiết lập cờ thuộc tính PROPERTY_COMPAT_ALLOW_ORIENTATION_OVERRIDE
thành false.
Cờ thuộc tính để điều chỉnh chế độ ghi đè
<property android:name="android.window.PROPERTY_COMPAT_ALLOW_ORIENTATION_OVERRIDE"
android:value="true|false"/>
Lệnh adb để kiểm thử chế độ ghi đè
Cách áp dụng chế độ ghi đè:
adb shell am compat enable OVERRIDE_ANY_ORIENTATION <package>
Cách xoá chế độ ghi đè:
adb shell am compat disable OVERRIDE_ANY_ORIENTATION <package>
Lưu ý: Các lệnh chỉ tạm thời áp dụng hoặc xoá chế độ ghi đè.
OVERRIDE_ORIENTATION_ONLY_FOR_CAMERA
Giới hạn các chế độ ghi đè OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT, OVERRIDE_UNDEFINED_ORIENTATION_TO_NOSENSOR và OVERRIDE_LANDSCAPE_ORIENTATION_TO_REVERSE_LANDSCAPE để chúng chỉ có hiệu lực khi kết nối tới máy ảnh đang hoạt động.
Cách ứng dụng có thể đạt được kết quả tương tự như ghi đè
Hãy đặt thuộc tính tệp kê khai activity:screenOrientation
hoặc dùng API Activity#setRequestedOrientation
.
Cách tối ưu hoá ứng dụng
Xem OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT
.
Cách tắt hoặc chọn không sử dụng chế độ ghi đè
Thiết lập cờ thuộc tính PROPERTY_COMPAT_ALLOW_ORIENTATION_OVERRIDE
thành false.
Cờ thuộc tính để điều chỉnh chế độ ghi đè
<property android:name="android.window.PROPERTY_COMPAT_ALLOW_ORIENTATION_OVERRIDE"
android:value="true|false"/>
Lệnh adb để kiểm thử chế độ ghi đè
Cách áp dụng chế độ ghi đè:
adb shell am compat enable OVERRIDE_ORIENTATION_ONLY_FOR_CAMERA <package>
Cách xoá chế độ ghi đè:
adb shell am compat disable OVERRIDE_ORIENTATION_ONLY_FOR_CAMERA <package>
Lưu ý: Các lệnh chỉ tạm thời áp dụng hoặc xoá chế độ ghi đè.
OVERRIDE_USE_DISPLAY_LANDSCAPE_NATURAL_ORIENTATION
Hạn chế để chỉ hiển thị theo hướng ngang tự nhiên khi các điều kiện sau được đáp ứng:
- Hoạt động ở chế độ toàn màn hình
- Thuộc tính thành phần chọn không sử dụng
PROPERTY_COMPAT_ALLOW_DISPLAY_ORIENTATION_OVERRIDE
chưa được bật - Nhà sản xuất thiết bị gốc đã bật chế độ cài đặt bỏ qua yêu cầu về hướng cho màn hình
- Hướng tự nhiên của màn hình là hướng ngang
Cách ứng dụng có thể đạt được kết quả tương tự như ghi đè
Không có. Sự cố sẽ được giải quyết trong logic ứng dụng.
Cách tối ưu hoá ứng dụng
Xem OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT
.
Cách tắt hoặc chọn không sử dụng chế độ ghi đè
Thiết lập cờ thuộc tính PROPERTY_COMPAT_ALLOW_DISPLAY_ORIENTATION_OVERRIDE
thành false.
Cờ thuộc tính để điều chỉnh chế độ ghi đè
<property android:name="android.window.PROPERTY_COMPAT_ALLOW_DISPLAY_ORIENTATION_OVERRIDE"
android:value="true|false"/>
Lệnh adb để kiểm thử chế độ ghi đè
Cách áp dụng chế độ ghi đè:
adb shell am compat enable OVERRIDE_USE_DISPLAY_LANDSCAPE_NATURAL_ORIENTATION <package>
Cách xoá chế độ ghi đè:
adb shell am compat disable OVERRIDE_USE_DISPLAY_LANDSCAPE_NATURAL_ORIENTATION <package>
Lưu ý: Các lệnh chỉ tạm thời áp dụng hoặc xoá chế độ ghi đè.
OVERRIDE_ENABLE_COMPAT_IGNORE_REQUESTED_ORIENTATION
Bật chính sách về khả năng tương thích để bỏ qua quá trình cập nhật hướng ứng dụng nhằm phản hồi ứng dụng gọi Activity#setRequestedOrientation()
khi ứng dụng đang chạy lại hoặc có một chế độ xử lý khả năng tương thích với máy ảnh đang hoạt động.
Cách ứng dụng có thể đạt được kết quả tương tự như ghi đè
Hãy đặt cờ thuộc tính PROPERTY_COMPAT_IGNORE_REQUESTED_ORIENTATION
thành true.
Cách tối ưu hoá ứng dụng
Xem OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT
.
Cách tắt hoặc chọn không sử dụng chế độ ghi đè
Thiết lập cờ thuộc tính PROPERTY_COMPAT_IGNORE_REQUESTED_ORIENTATION
thành false.
Cờ thuộc tính để điều chỉnh chế độ ghi đè
<property android:name="android.window.PROPERTY_COMPAT_IGNORE_REQUESTED_ORIENTATION"
android:value="true|false"/>
Lệnh adb để kiểm thử chế độ ghi đè
Cách áp dụng chế độ ghi đè:
adb shell am compat enable OVERRIDE_ENABLE_COMPAT_IGNORE_REQUESTED_ORIENTATION <package>
Cách xoá chế độ ghi đè:
adb shell am compat disable OVERRIDE_ENABLE_COMPAT_IGNORE_REQUESTED_ORIENTATION <package>
Lưu ý: Các lệnh chỉ tạm thời áp dụng hoặc xoá chế độ ghi đè.
OVERRIDE_ENABLE_COMPAT_IGNORE_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED
Bật chính sách về khả năng tương thích mà bỏ qua hướng đã yêu cầu của ứng dụng để phản hồi một ứng dụng gọi Activity#setRequestedOrientation()
nhiều hơn 2 lần trong một giây nếu một hoạt động không được tạo hiệu ứng hòm thư cho hướng cố định.
Cách ứng dụng có thể đạt được kết quả tương tự như ghi đè
Không có. Sự cố sẽ được giải quyết trong logic ứng dụng.
Cách tối ưu hoá ứng dụng
Xem OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT
.
Cách tắt hoặc chọn không sử dụng chế độ ghi đè
Thiết lập cờ thuộc tính PROPERTY_COMPAT_ALLOW_IGNORING_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED
thành false.
Cờ thuộc tính để điều chỉnh chế độ ghi đè
<property android:name="android.window.PROPERTY_COMPAT_ALLOW_IGNORING_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED"
android:value="false"/>
Lệnh adb để kiểm thử chế độ ghi đè
Cách áp dụng chế độ ghi đè:
adb shell am compat enable OVERRIDE_ENABLE_COMPAT_IGNORE_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED <package>
Cách xoá chế độ ghi đè:
adb shell am compat disable OVERRIDE_ENABLE_COMPAT_IGNORE_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED <package>
Lưu ý: Các lệnh chỉ tạm thời áp dụng hoặc xoá chế độ ghi đè.
OVERRIDE_RESPECT_REQUESTED_ORIENTATION
Loại trừ các gói khỏi hành vi bỏ qua yêu cầu về hướng mà nhà sản xuất thiết bị có thể bật cho một khu vực hiển thị hoặc toàn bộ màn hình.
Cách ứng dụng có thể đạt được kết quả tương tự như ghi đè
Không có. Sự cố sẽ được giải quyết trong logic ứng dụng.
Cách tối ưu hoá ứng dụng
Xem OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT
.
Cách tắt hoặc chọn không sử dụng chế độ ghi đè
Không chọn không sử dụng. Thao tác tắt chế độ ghi đè có thể nguy hiểm nếu ứng dụng không tương thích với một thiết bị đã được bật chế độ cài đặt bỏ qua yêu cầu về hướng của OEM. Hãy liên hệ với nhóm Quan hệ với nhà phát triển Android để tắt chế độ ghi đè.
Cờ thuộc tính để điều chỉnh chế độ ghi đè
Không có cờ thuộc tính nào cho chế độ ghi đè này.
Lệnh adb để kiểm thử chế độ ghi đè
Cách áp dụng chế độ ghi đè:
adb shell am compat enable OVERRIDE_RESPECT_REQUESTED_ORIENTATION <package>
Cách xoá chế độ ghi đè:
adb shell am compat disable OVERRIDE_RESPECT_REQUESTED_ORIENTATION <package>
Lưu ý: Các lệnh chỉ tạm thời áp dụng hoặc xoá chế độ ghi đè.
NEVER_SANDBOX_DISPLAY_APIS
Buộc các gói không bao giờ áp dụng hộp cát API Display
cho một hoạt động ở chế độ hòm thư hoặc tương thích với kích thước. Các API Display
tiếp tục cung cấp những giới hạn về khu vực hiển thị
Cách ứng dụng có thể đạt được kết quả tương tự như ghi đè
Khai báo các hoạt động có thể đổi kích thước bằng cách đặt thuộc tính tệp kê khai android:resizeableActivity
thành true hoặc cờ siêu dữ liệu android.supports_size_changes
thành true.
Cách tối ưu hoá ứng dụng
Những ứng dụng tuyên bố là hoàn toàn có thể đổi kích thước phải tuyệt đối không dựa vào kích thước màn hình để định vị các phần tử trên giao diện người dùng. Di chuyển ứng dụng của bạn sang các API mới nhất cung cấp WindowMetrics
. Nếu đang dùng Jetpack Compose, bạn có thể tận dụng API WindowSizeClass
để vẽ giao diện người dùng dựa trên diện tích màn hình mà ứng dụng có trên màn hình hiện tại. Hãy xem bài viết Hỗ trợ nhiều kích thước màn hình.
Cách tắt hoặc chọn không sử dụng chế độ ghi đè
Không chọn không sử dụng. Di chuyển từ các API không dùng nữa.
Cờ thuộc tính để điều chỉnh chế độ ghi đè
Không có cờ thuộc tính nào cho chế độ ghi đè này.
Lệnh adb để kiểm thử chế độ ghi đè
Cách áp dụng chế độ ghi đè:
adb shell am compat enable NEVER_SANDBOX_DISPLAY_APIS <package>
Cách xoá chế độ ghi đè:
adb shell am compat disable NEVER_SANDBOX_DISPLAY_APIS <package>
Lưu ý: Các lệnh chỉ tạm thời áp dụng hoặc xoá chế độ ghi đè.
ALWAYS_SANDBOX_DISPLAY_APIS
Buộc các gói luôn áp dụng hộp cát API Display
bất kể chế độ kết xuất cửa sổ hiện tại. Các API Display
luôn cung cấp các giới hạn đối với ứng dụng.
Cách ứng dụng có thể đạt được kết quả tương tự như ghi đè
Khai báo các hoạt động không thể đổi kích thước bằng cách đặt thuộc tính android:resizeableActivity
thành false hoặc cờ siêu dữ liệu android.supports_size_changes
thành false.
Cách tối ưu hoá ứng dụng
Những ứng dụng tuyên bố là hoàn toàn có thể đổi kích thước phải tuyệt đối không dựa vào kích thước màn hình để định vị các phần tử trên giao diện người dùng. Hãy di chuyển ứng dụng của bạn từ các API không dùng nữa sang các API mới nhất cung cấp WindowMetrics
. Xem WindowMetricsCalculator
.
Cách tắt hoặc chọn không sử dụng chế độ ghi đè
Không chọn không sử dụng. Di chuyển từ các API không dùng nữa.
Cờ thuộc tính để điều chỉnh chế độ ghi đè
Không có cờ thuộc tính nào cho chế độ ghi đè này.
Lệnh adb để kiểm thử chế độ ghi đè
Cách áp dụng chế độ ghi đè:
adb shell am compat enable ALWAYS_SANDBOX_DISPLAY_APIS <package>
Cách xoá chế độ ghi đè:
adb shell am compat disable ALWAYS_SANDBOX_DISPLAY_APIS <package>
Lưu ý: Các lệnh chỉ tạm thời áp dụng hoặc xoá chế độ ghi đè.
OVERRIDE_SANDBOX_VIEW_BOUNDS_APIS
Buộc các gói tạo hộp cát cho các API View
sau đây đối với giới hạn hoạt động:
Cách ứng dụng có thể đạt được kết quả tương tự như ghi đè
Giải quyết vấn đề trong mã xử lý ứng dụng bằng cách dùng các API cung cấp những giới hạn của cửa sổ ứng dụng và độ lệch tương đối so với cửa sổ ứng dụng thay vì các giới hạn của màn hình thiết bị và độ lệch tương ứng với màn hình thiết bị.
Cách tối ưu hoá ứng dụng
Ứng dụng phải dùng các API View
, có tính đến khả năng tạo hiệu ứng hòm thư và chế độ nhiều cửa sổ được áp dụng cho ứng dụng. Hãy xem WindowMetricsCalculator
.
Cách tắt hoặc chọn không sử dụng chế độ ghi đè
Thiết lập cờ thuộc tính PROPERTY_COMPAT_ALLOW_SANDBOXING_VIEW_BOUNDS_APIS
thành false.
Cờ thuộc tính để điều chỉnh chế độ ghi đè
<property android:name="android.window.PROPERTY_COMPAT_ALLOW_SANDBOXING_VIEW_BOUNDS_APIS"
android:value="false"/>
Lệnh adb để kiểm thử chế độ ghi đè
Cách áp dụng chế độ ghi đè:
adb shell am compat enable OVERRIDE_SANDBOX_VIEW_BOUNDS_APIS <package>
Cách xoá chế độ ghi đè:
adb shell am compat disable OVERRIDE_SANDBOX_VIEW_BOUNDS_APIS <package>
Lưu ý: Các lệnh chỉ tạm thời áp dụng hoặc xoá chế độ ghi đè.
OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION
Tắt tính năng buộc xoay. Cải thiện trải nghiệm người dùng trong một số ứng dụng.
Cách ứng dụng có thể đạt được kết quả tương tự như ghi đè
Hãy đặt cờ thuộc tính PROPERTY_CAMERA_COMPAT_ALLOW_FORCE_ROTATION
thành false.
Cách tối ưu hoá ứng dụng
Đừng dựa vào hướng cảm biến của máy ảnh được lưu vào bộ nhớ đệm hoặc thông tin thiết bị. Để biết hướng dẫn về khả năng tương thích với máy ảnh, hãy xem bài viết Giới thiệu về kính ngắm của máy ảnh và Hỗ trợ các nền tảng có thể đổi kích thước trong ứng dụng máy ảnh.
Cách tắt hoặc chọn không sử dụng chế độ ghi đè
Thiết lập cờ thuộc tính PROPERTY_CAMERA_COMPAT_ALLOW_FORCE_ROTATION
thành true.
Cờ thuộc tính để điều chỉnh chế độ ghi đè
<property android:name="android.window.PROPERTY_CAMERA_COMPAT_ALLOW_FORCE_ROTATION"
android:value="true|false"/>
Lệnh adb để kiểm thử chế độ ghi đè
Cách áp dụng chế độ ghi đè để loại bỏ tính năng buộc xoay:
adb shell am compat enable OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION <package>
Cách loại bỏ chế độ ghi đè để cho phép thực hiện buộc xoay:
adb shell am compat disable OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION <package>
Lưu ý: Các lệnh chỉ tạm thời áp dụng hoặc xoá chế độ ghi đè.
OVERRIDE_CAMERA_COMPAT_DISABLE_REFRESH
Tắt chế độ làm mới hoạt động sau khi buộc xoay. Cải thiện trải nghiệm người dùng trong các ứng dụng khi chế độ làm mới khiến trạng thái bị mất.
Cách ứng dụng có thể đạt được kết quả tương tự như ghi đè
Hãy đặt cờ thuộc tính PROPERTY_CAMERA_COMPAT_ALLOW_REFRESH
thành false.
Cách tối ưu hoá ứng dụng
Đừng dựa vào hướng cảm biến của máy ảnh được lưu vào bộ nhớ đệm hoặc thông tin thiết bị. Để biết hướng dẫn về khả năng tương thích với máy ảnh, hãy xem bài viết Giới thiệu về kính ngắm của máy ảnh và Hỗ trợ các nền tảng có thể đổi kích thước trong ứng dụng máy ảnh.
Cách tắt hoặc chọn không sử dụng chế độ ghi đè
Thiết lập cờ thuộc tính PROPERTY_CAMERA_COMPAT_ALLOW_REFRESH
thành true.
Cờ thuộc tính để điều chỉnh chế độ ghi đè
<property android:name="android.window.PROPERTY_CAMERA_COMPAT_ALLOW_REFRESH"
android:value="true|false"/>
Lệnh adb để kiểm thử chế độ ghi đè
Cách áp dụng chế độ ghi đè để xoá chế độ làm mới hoạt động:
adb shell am compat enable OVERRIDE_CAMERA_COMPAT_DISABLE_REFRESH <package>
Cách xoá chế độ ghi đè để cho phép chế độ làm mới hoạt động:
adb shell am compat disable OVERRIDE_CAMERA_COMPAT_DISABLE_REFRESH <package>
Lưu ý: Các lệnh chỉ tạm thời áp dụng hoặc xoá chế độ ghi đè.
OVERRIDE_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE
Tạo các gói được áp dụng lệnh này để làm mới hoạt động bằng chu kỳ onResume()
→ onPause()
→ onResume()
thay vì chu kỳ onResume()
→ onStop()
→ onResume()
sau khi buộc xoay để tương thích với máy ảnh.
Cách ứng dụng có thể đạt được kết quả tương tự như ghi đè
Hãy đặt cờ thuộc tính PROPERTY_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE
thành true.
Cách tối ưu hoá ứng dụng
Đừng dựa vào hướng cảm biến của máy ảnh được lưu vào bộ nhớ đệm hoặc thông tin thiết bị. Để biết hướng dẫn về khả năng tương thích với máy ảnh, hãy xem bài viết Giới thiệu về kính ngắm của máy ảnh và Hỗ trợ các nền tảng có thể đổi kích thước trong ứng dụng máy ảnh.
Cách tắt hoặc chọn không sử dụng chế độ ghi đè
Thiết lập cờ thuộc tính PROPERTY_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE
thành false.
Cờ thuộc tính để điều chỉnh chế độ ghi đè
<property android:name="android.window.PROPERTY_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE"
android:value="true|false"/>
Lệnh adb để kiểm thử chế độ ghi đè
Cách áp dụng chế độ ghi đè:
adb shell am compat enable OVERRIDE_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE <package>
Cách xoá chế độ ghi đè:
adb shell am compat disable OVERRIDE_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE <package>
Lưu ý: Các lệnh chỉ tạm thời áp dụng hoặc xoá chế độ ghi đè.
OVERRIDE_CAMERA_LANDSCAPE_TO_PORTRAIT
Buộc cắt đầu ra của máy ảnh theo hướng đối diện khi hướng dọc của máy ảnh không phù hợp với hướng tự nhiên của thiết bị. Nhiều ứng dụng không xử lý trường hợp này và hiện hình ảnh bị kéo giãn.
Cách ứng dụng có thể đạt được kết quả tương tự như ghi đè
Hãy đặt cờ thuộc tính PROPERTY_COMPAT_OVERRIDE_LANDSCAPE_TO_PORTRAIT
thành true.
Cách tối ưu hoá ứng dụng
Đừng dựa vào hướng cảm biến của máy ảnh được lưu vào bộ nhớ đệm hoặc thông tin thiết bị. Để biết hướng dẫn về khả năng tương thích với máy ảnh, hãy xem bài viết Giới thiệu về kính ngắm của máy ảnh và Hỗ trợ các nền tảng có thể đổi kích thước trong ứng dụng máy ảnh.
Cách tắt hoặc chọn không sử dụng chế độ ghi đè
Thiết lập cờ thuộc tính PROPERTY_COMPAT_OVERRIDE_LANDSCAPE_TO_PORTRAIT
thành false.
Cờ thuộc tính để điều chỉnh chế độ ghi đè
<property android:name="android.camera.PROPERTY_COMPAT_OVERRIDE_LANDSCAPE_TO_PORTRAIT"
android:value="true|false"/>
Lệnh adb để kiểm thử chế độ ghi đè
Cách áp dụng chế độ ghi đè để áp dụng tính năng cắt máy ảnh bên trong phía trước:
adb shell am compat enable OVERRIDE_CAMERA_LANDSCAPE_TO_PORTRAIT <package>
Cách xoá chế độ ghi đè để xoá tính năng cắt máy ảnh bên trong phía trước:
adb shell am compat disable OVERRIDE_CAMERA_LANDSCAPE_TO_PORTRAIT <package>
Lưu ý: Các lệnh chỉ tạm thời áp dụng hoặc xoá chế độ ghi đè.
OVERRIDE_ENABLE_COMPAT_FAKE_FOCUS
Cho phép gửi tiêu điểm giả cho các ứng dụng không có tiêu điểm ở chế độ chia đôi màn hình. Một số công cụ phát triển trò chơi chờ lấy tiêu điểm rồi mới vẽ nội dung của ứng dụng. Do đó, tiêu điểm giả giúp các ứng dụng tránh bị bôi đen khi chúng được tiếp tục và chưa có tiêu điểm.
Cách ứng dụng có thể đạt được kết quả tương tự như ghi đè
Hãy đặt cờ thuộc tính PROPERTY_COMPAT_ENABLE_FAKE_FOCUS
thành true.
Cách tối ưu hoá ứng dụng
Bạn có thể tránh vấn đề này nếu ứng dụng của bạn xử lý tốt nhiều hướng và các thay đổi về cấu hình. Hãy tuân thủ nguyên tắc về Chất lượng ứng dụng có màn hình lớn để màn hình lớn của ứng dụng luôn sẵn sàng hoạt động.
Nếu bạn chạy công cụ phát triển trò chơi Unity, hãy nâng cấp lên phiên bản 2019.4.40 trở lên rồi xuất lại trò chơi của bạn. Giữ nguyên lựa chọn Resizable Window
trong phần cài đặt Trình phát Android.
Cách tắt hoặc chọn không sử dụng chế độ ghi đè
Thiết lập cờ thuộc tính PROPERTY_COMPAT_ENABLE_FAKE_FOCUS
thành false.
Cờ thuộc tính để điều chỉnh chế độ ghi đè
<property android:name="android.window.PROPERTY_COMPAT_ENABLE_FAKE_FOCUS"
android:value="true|false"/>
Lệnh adb để kiểm thử chế độ ghi đè
Cách áp dụng chế độ ghi đè:
adb shell am compat enable OVERRIDE_ENABLE_COMPAT_FAKE_FOCUS <package>
Cách xoá chế độ ghi đè:
adb shell am compat disable OVERRIDE_ENABLE_COMPAT_FAKE_FOCUS <package>
Lưu ý: Các lệnh chỉ tạm thời áp dụng hoặc xoá chế độ ghi đè.
Tài nguyên khác
- Nguyên tắc về chất lượng ứng dụng có màn hình lớn
- Nguyên tắc về chất lượng cốt lõi của ứng dụng.