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 bằng cách gọi enableEdgeToEdge. Điều này là đủ đối với hầu hết các ứng dụng. Hướng dẫn này mô tả cách bật tràn viền nếu ứng dụng của bạn cần thực hiện việc đó mà không 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 phía sau các thanh hệ thống, như trong mã sau ví dụ:

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 của thanh hệ thống để cho phép nội dung bên dưới hiển thị. Sau ứng dụng thực hiện bước này, hệ thống sẽ xử lý toàn bộ biện pháp bảo vệ hình ảnh của 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 khả năng điều chỉnh màu động trong mà nội dung trên thanh hệ thống thay đổi màu dựa trên nội dung phía sau chúng. Trong ví dụ sau, ô điều khiển trên thanh điều hướng thay đổi thành màu tối khi ở trên mức nội dung sáng và sang màu sáng khi ở trên nội dung tối.
Hình 1. Thay đổi màu sắc trong thao tác bằng cử chỉ .
  • Chế độ nút: hệ thống áp dụng khung mờ màn hình phía sau thanh hệ thống (đối với API cấp 29 trở lên) hoặc một hệ thống minh bạch (đối với API cấp 28 trở xuống).
Hình ảnh hiển thị các thanh hệ thống trong suốt
Hình 2. Màn chắn mờ phía sau các thanh hệ thống.
  • 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ư làm thời gian và biểu tượng.
Màu nội dung thanh trạng thái hiển thị hình ảnh
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à để đặt thanh trạng thái là trong suốt và màu nội dung thanh trạng thái như 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 API WindowInsetsController trực tiếp, nhưng bạn nên sử dụng Thư viện hỗ trợ WindowInsetsControllerCompat khi 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. Để làm như vậy, hãy sử dụng setAppearanceLightNavigationBars() , truyền vào true để thay đổi màu nền trước của thanh điều hướng thành màu sáng hoặc false để hoàn nguyê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);