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

Việc gọi enableEdgeToEdge bao gồm logic cần thiết để thực sự tương thích ngược và do đó, đây là cách nên dùng để thiết lập màn hình tràn viền. Hãy tham khảo tài liệu về ComposeKhung hiển thị thay vì hướng dẫn này để biết cách hiện đại nhất để hiển thị tràn viền bằng enableEdgeToEdge.

Mặc dù không nên, nhưng nếu ứng dụng của bạn phải thiết lập màn hình tràn viền theo cách thủ công, bạn có thể làm theo các bước sau:

  1. Gọi WindowCompat.setDecorFitsSystemWindows(window, false).
  2. Đặt các thanh hệ thống thành trong suốt.
  3. Xử lý phần lồng ghép.

Bố trí ứ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 ví dụ về mã 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 các thanh hệ thống

Khi tạo bố cục tràn viền theo cách thủ công cho Android 14 trở về trước, ứng dụng của bạn cũng phải làm cho các thanh hệ thống trong suốt.

Bạn có thể chỉnh sửa tệp themes.xml để đặt màu của thanh trạng thái và thanh điều hướng thành trong suốt, đồng thời thay đổi màu biểu tượng trên thanh trạng thá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ể dùng API WindowInsetsControllerCompat thay vì theme.xml để kiểm soát màu nội dung của thanh trạng thái. Để làm như vậy, hãy sử dụng hàm setAppearanceLightNavigationBars(), truyền 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 để quay lại 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);

Xử lý phần lồng ghép

Cuối cùng, ứng dụng của bạn phải xử lý phần lồng ghép để giao diện người dùng quan trọng tránh được thanh hệ thống và vết cắt trên màn hình. Hãy tham khảo tài liệu về ComposeKhung hiển thị để tìm hiểu cách xử lý phần lồng ghép.