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

enableEdgeToEdge를 호출하여 앱에서 더 넓은 화면 표시를 사용 설정할 수 있습니다. 대부분의 앱에는 이 정도면 충분합니다. 이 가이드에서는 앱에서 enableEdgeToEdge를 사용하지 않고도 전체 화면을 사용 설정해야 하는 경우 이를 사용하는 방법을 설명합니다.

전체 화면에서 앱 레이아웃 지정

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

Kotlin

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>

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