Настройка Edge-to-edge

Экранирование от края до края позволяет вашему приложению отображать свой пользовательский интерфейс за системными панелями — строкой состояния, строкой заголовков и панелью навигации — для достижения более полного погружения в пользовательский опыт. Если вы ориентируетесь на устройства под управлением Android 15 (уровень API 35) или выше, экранирование от края до края будет включено по умолчанию.

Для корректного отображения контента от края до края на всех версиях Android выполните следующие шаги настройки. Без выполнения этих шагов ваше приложение может отображать сплошные цвета за системными панелями или не анимировать свой контент синхронно с переходами экранной клавиатуры (IME).

1. Включите отображение от края до края экрана.

Чтобы включить режим «от края до края» в предыдущих версиях Android, вызовите метод enableEdgeToEdge() в методе Activity.onCreate() :

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    enableEdgeToEdge()
    ...
}

По умолчанию enableEdgeToEdge() делает системные панели прозрачными, за исключением режима навигации с тремя кнопками, где она применяет полупрозрачную полосу к панели навигации для лучшего контраста. Цвет системных значков и полосы адаптируется к светлой или темной теме системы.

2. Настройте windowSoftInputMode

В файле AndroidManifest.xml вашего Activity установите android:windowSoftInputMode="adjustResize" . Эта настройка позволяет вашему приложению получать отступы IME, что дает возможность регулировать макет с помощью отступов при появлении или исчезновении экранной клавиатуры.

<!-- In your AndroidManifest.xml file: -->
<activity
  android:name=".ui.MainActivity"
  android:label="@string/app_name"
  android:windowSoftInputMode="adjustResize"
  android:theme="@style/Theme.MyApplication"
  android:exported="true">
  ...
</activity>

3. Обработка наложений с помощью вставок.

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

Отступы описывают части экрана, которые пересекаются с пользовательским интерфейсом системы или системными жестами. Основные типы отступов, которые следует учитывать для дисплеев от края до края, следующие:

  • Отступы системных панелей: обозначают области, где отображаются системные панели. Используйте их, чтобы избежать перекрытия пользовательского интерфейса системными панелями.
  • Вставки для вырезов на экране: обозначают области, где на экране устройства имеется физический вырез (например, вырез для камеры).

В Compose вы можете управлять отступами с помощью линеек, модификаторов отступов или модификаторов размера отступа. Подробные инструкции см. в разделе «О программе: Отступы окна» .

Расширенные темы

Для более сложных сценариев использования, охватывающих все аспекты взаимодействия, следует рассмотреть следующие варианты.

Иммерсивный режим

Некоторым видам контента, таким как видео или карты, полезно обеспечить полное погружение, скрыв системные панели. Скрыть системные панели можно с помощью WindowInsetsControllerCompat :

val windowInsetsController =
    WindowCompat.getInsetsController(window, window.decorView)

// Hide the system bars.
windowInsetsController.hide(WindowInsetsCompat.Type.systemBars())

// Show the system bars.
windowInsetsController.show(WindowInsetsCompat.Type.systemBars()) For example, use either `Scaffold`,

Цвета и значки системной панели

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

Чтобы изменить цвет значков в строке состояния на светлый или темный, используйте WindowInsetsControllerCompat :

// Set status bar icons to dark
WindowCompat.getInsetsController(window, window.decorView)
    .isAppearanceLightStatusBars = true

// Set status bar icons to light
WindowCompat.getInsetsController(window, window.decorView)
    .isAppearanceLightStatusBars = false

Защита системной панели

Хотя enableEdgeToEdge() по умолчанию предоставляет прозрачные или полупрозрачные системные панели, вам может потребоваться настроить это. Обратитесь к рекомендациям Android по дизайну системных панелей и по дизайну от края до края, чтобы решить, когда использовать прозрачные, а когда полупрозрачные панели.

Чтобы сделать панель навигации с тремя кнопками полностью прозрачной, а не полупрозрачной, можно отключить принудительное изменение контрастности:

window.isNavigationBarContrastEnforced = false

Для получения дополнительной информации см. раздел «О защите системной панели» .

Диалоги

Чтобы отобразить диалоговые окна в полноэкранном режиме от края до края, вызовите метод WindowCompat.enableEdgeToEdge в методе onStart() диалогового окна:

class MyAlertDialogFragment : DialogFragment() {
    override fun onStart(){
        super.onStart()
        dialog?.window?.let { WindowCompat.enableEdgeToEdge(it) }
    }
    ...
}