Thiết lập thủ công màn hình tràn viền

Bạn có thể bật màn hình tràn viền trong ứng dụng của mình bằng cách gọi enableEdgeToEdge. Điều này là đủ cho hầu hết các ứng dụng. Hướng dẫn này mô tả cách bật tính năng cạnh tranh nếu ứng dụng của bạn cần làm như vậy mà không sử dụng enableEdgeToEdge.

Giới thiệu ứng dụng ở chế độ toàn màn hình

Sử dụng WindowCompat.setDecorFitsSystemWindows(window, false) để bố trí ứng dụng của bạn phía sau các thanh hệ thống, như trong đoạn mã ví dụ sau:

Kotlin

override fun onCreate(savedInstanceState: Bundle?) {
  super.onCreate(savedInstanceState)
  WindowCompat.setDecorFitsSystemWindows(window, false)
}

Java

@Override
public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  WindowCompat.setDecorFitsSystemWindows(getWindow(), false);
}

Thay đổi màu của thanh hệ thống

Khi hoạt động ở bố cục tràn viền, ứng dụng của bạn cần thay đổi màu sắc của thanh hệ thống để cho phép hiển thị nội dung bên dưới. Sau khi ứng dụng của bạn thực hiện bước này, hệ thống sẽ xử lý mọi biện pháp bảo vệ hình ảnh của giao diện người dùng ở chế độ thao tác bằng cử chỉ và ở chế độ nút.

  • Chế độ thao tác bằng cử chỉ: hệ thống áp dụng tính năng điều chỉnh màu động, trong đó nội dung của thanh hệ thống thay đổi màu dựa trên nội dung phía sau. Trong ví dụ sau, ô điều khiển trên thanh điều hướng sẽ thay đổi thành màu tối khi ở phía trên nội dung sáng và thành màu sáng khi ở phía trên nội dung tối.
Hình 1. Các thay đổi về màu sắc trong chế độ thao tác bằng cử chỉ.
  • Chế độ nút: hệ thống áp dụng một màn hình mờ phía sau thanh hệ thống (đối với API cấp 29 trở lên) hoặc thanh hệ thống trong suốt (đối với API cấp 28 trở xuống).
Hình ảnh cho thấy các thanh hệ thống mờ
Hình 2. Màn chắn mờ phía sau thanh hệ thống.
  • Status bar color (Màu nội dung trên thanh trạng thái): kiểm soát màu của nội dung thanh trạng thái, chẳng hạn như thời gian và các biểu tượng.
Hình ảnh hiển thị màu nội dung trên thanh trạng thái
Hình 3. Màu nội dung trên thanh trạng thái.

Bạn có thể chỉnh sửa tệp themes.xml để đặt màu của thanh điều hướng và tuỳ ý đặt thanh trạng thái thành trong suốt và màu nội dung thanh trạng thái là tối.

<!-- values-v29/themes.xml -->
<style name="Theme.MyApp">
  <item name="android:navigationBarColor">
     @android:color/transparent
  </item>

  <!-- Optional: set to transparent if your app is drawing behind the status bar. -->
  <item name="android:statusBarColor">
     @android:color/transparent
  </item>

  <!-- Optional: set for a light status bar with dark content. -->
  <item name="android:windowLightStatusBar">
    true
  </item>
</style>

Bạn có thể sử dụng trực tiếp API WindowInsetsController, nhưng bạn nên sử dụng Thư viện hỗ trợ WindowInsetsControllerCompat nếu có thể. Bạn có thể sử dụng API WindowInsetsControllerCompat thay vì theme.xml để kiểm soát màu nội dung của thanh trạng thái. Để thực hiện việc này, hãy sử dụng hàm setAppearanceLightNavigationBars(), truyền vào true để thay đổi màu nền trước của thành phần điều hướng thành màu sáng hoặc false để chuyển về màu mặc định.

Kotlin

val windowInsetsController =
      ViewCompat.getWindowInsetsController(window.decorView)

windowInsetsController?.isAppearanceLightNavigationBars = true

Java

WindowInsetsControllerCompat windowInsetsController =
      ViewCompat.getWindowInsetsController(getWindow().getDecorView());
if (windowInsetsController == null) {
    return;
}

windowInsetsController.setAppearanceLightNavigationBars(true);