Ручная настройка безрамочного дисплея

Вы можете включить отображение экрана от края до края в своём приложении, вызвав метод enableEdgeToEdge . Этого должно быть достаточно для большинства приложений. В этом руководстве описывается, как включить отображение экрана от края до края, если вашему приложению это необходимо, без использования enableEdgeToEdge .

Разверните приложение на весь экран

Используйте WindowCompat.setDecorFitsSystemWindows(window, false) , чтобы разместить приложение за системными панелями, как показано в следующем примере кода:

Котлин

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

Ява

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

Изменить цвет системных панелей

При работе в макете «от края до края» вашему приложению необходимо изменить цвета системных панелей, чтобы содержимое под ними было видно. После того, как приложение выполнит этот шаг, система возьмёт на себя всю визуальную защиту пользовательского интерфейса в режиме навигации жестами и в режиме кнопок.

  • Режим навигации жестами: система применяет динамическую адаптацию цвета, при которой содержимое системных панелей меняет цвет в зависимости от расположенного за ними контента. В следующем примере маркер на панели навигации меняет цвет на тёмный, когда он находится над светлым контентом, и на светлый, когда он находится над тёмным контентом.
Рисунок 1. Изменение цвета в режиме навигации жестами.
  • Режим кнопки: система применяет полупрозрачную сетку за системными панелями (для уровня API 29 или более поздних версий) или прозрачную системную панель (для уровня API 28 или более ранних версий).
Изображение, демонстрирующее полупрозрачные системные панели
Рисунок 2. Прозрачная сетка за решеткой системы.
  • Цвет содержимого строки состояния: управляет цветом содержимого строки состояния, например времени и значков.
Изображение, показывающее цвет содержимого строки состояния
Рисунок 3. Цвет содержимого строки состояния.

Вы можете отредактировать файл themes.xml , чтобы установить цвет панели навигации и, при желании, сделать строку состояния прозрачной, а цвет ее содержимого — темным.

<!-- 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>

Вы можете использовать API WindowInsetsController напрямую, но мы настоятельно рекомендуем использовать библиотеку поддержки WindowInsetsControllerCompat везде, где это возможно. Вы можете использовать API WindowInsetsControllerCompat вместо theme.xml для управления цветом содержимого строки состояния. Для этого используйте функцию setAppearanceLightNavigationBars() , передав значение true для изменения цвета переднего плана навигации на светлый или false для возврата к цвету по умолчанию.

Котлин

val windowInsetsController =
      ViewCompat.getWindowInsetsController(window.decorView)

windowInsetsController?.isAppearanceLightNavigationBars = true

Ява

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

windowInsetsController.setAppearanceLightNavigationBars(true);