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); }
시스템 표시줄의 색상 변경
더 넓은 레이아웃으로 작동할 때 앱은 그 아래의 콘텐츠가 보이도록 시스템 표시줄의 색상을 변경해야 합니다. 앱이 이 단계를 실행하면 시스템은 동작 탐색 모드와 버튼 모드에서 사용자 인터페이스의 모든 시각적 보호를 처리합니다.
- 동작 탐색 모드: 시스템은 시스템 표시줄 뒤의 콘텐츠에 따라 시스템 표시줄 콘텐츠의 색상을 변경하는 동적 색상 조정을 적용합니다. 다음 예에서 탐색 메뉴의 핸들은 밝은 콘텐츠 위에 있으면 어두운 색상으로, 어두운 콘텐츠 위에 있으면 밝은 색상으로 변경됩니다.
- 버튼 모드: 시스템은 시스템 표시줄 뒤에 반투명 스크림을 적용하거나 (API 수준 29 이상의 경우) 투명한 시스템 바 (API 수준 28 이하)를 적용합니다.
- 상태 표시줄 콘텐츠 색상: 시간 및 아이콘과 같은 상태 표시줄 콘텐츠의 색상을 제어합니다.
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);