더 넓은 화면 디스플레이 수동으로 설정하기

enableEdgeToEdge를 호출하여 앱에서 더 넓은 화면 디스플레이를 사용 설정할 수 있습니다. 대부분의 앱에서는 이 정도면 충분합니다. 이 가이드에서는 앱에서 enableEdgeToEdge를 사용하지 않고 더 넓은 화면 모드를 사용 설정하는 방법을 설명합니다.

전체 화면에 앱 배치

다음 코드 예에서와 같이 WindowCompat.setDecorFitsSystemWindows(window, false)를 사용하여 시스템 표시줄 뒤에 앱을 배치합니다.

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);
}

시스템 표시줄의 색상 변경

더 넓은 레이아웃으로 작동할 때 앱은 그 아래의 콘텐츠가 보이도록 시스템 표시줄의 색상을 변경해야 합니다. 앱이 이 단계를 실행하면 시스템은 동작 탐색 모드와 버튼 모드에서 사용자 인터페이스의 모든 시각적 보호를 처리합니다.

  • 동작 탐색 모드: 시스템은 시스템 표시줄 뒤의 콘텐츠에 따라 시스템 표시줄 콘텐츠의 색상을 변경하는 동적 색상 조정을 적용합니다. 다음 예에서 탐색 메뉴의 핸들은 밝은 콘텐츠 위에 있으면 어두운 색상으로, 어두운 콘텐츠 위에 있으면 밝은 색상으로 변경됩니다.
그림 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>

WindowInsetsController API를 직접 사용할 수도 있지만 가능하면 지원 라이브러리 WindowInsetsControllerCompat를 사용하는 것이 좋습니다. theme.xml 대신 WindowInsetsControllerCompat API를 사용하여 상태 표시줄의 콘텐츠 색상을 제어할 수 있습니다. 이렇게 하려면 setAppearanceLightNavigationBars() 함수를 사용하고 true를 전달하여 탐색의 전경색을 밝은 색상으로 변경하거나 false를 기본 색상으로 되돌립니다.

Kotlin

val windowInsetsController =
      ViewCompat.getWindowInsetsController(window.decorView)

windowInsetsController?.isAppearanceLightNavigationBars = true

Java

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

windowInsetsController.setAppearanceLightNavigationBars(true);