Android 시스템 바 레이아웃 변경하기
배경색, 투명도, 레이아웃 변경
Android 시스템바 색상 설정 변경하는 방법
컨텐츠 레이아웃이 화면 전체를 차지하도록 설정
WindowCompat.setDecorFitsSystemWindows(window, true or false)
true | false |
---|---|
컨텐츠 레이아웃의 범위가 상태 바와 네비게이션 바 영역을 제외한 영역만 차지합니다. | 컨텐츠 레이아웃의 범위가 상태 바와 네비게이션 바 영역까지 확장됩니다. |
true
false
true와 달리, 레이아웃 계층에서 navigationBarBackground와 statusBarBackground가 최상위로 올라오게 됩니다.
상태 바와 네비게이션 바 색상 변경
window.apply {
WindowCompat.setDecorFitsSystemWindows(window, false)
navigationBarColor = Color.TRANSPARENT
statusBarColor = Color.TRANSPARENT
}
배경색이 변경되게 됩니다.
상태 바 : GREEN, 네비게이션 바 : GREEN | 상태 바 : TRANSPARENT, 네비게이션 바 : TRANSPARENT |
---|---|
- 상태 바
- 투명으로 설정하면 DecorView에서 그려지지 않습니다.
- 네비게이션 바
- 투명으로 설정하더라도 DecorView에서 그려지게 됩니다.
- 투명으로 설정하면 배경색이 검은색으로 설정됩니다.
상태 바와 네비게이션 바를 투명하게 하기
window.addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS)
아래의 코드와 같은 상태에서 네비게이션 바가 DecorView에서 사라지고 배경색이 투명하게 되는 것과 같습니다.
window.apply {
WindowCompat.setDecorFitsSystemWindows(window, false)
navigationBarColor = Color.TRANSPARENT
statusBarColor = Color.TRANSPARENT
}
뷰의 위치를 시스템 바와 겹치지 않도록 설정하기
window.addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS)
위와 같은 상태에서는, 뷰가 시스템 바와 겹치게 됩니다.
겹치는 뷰에 대하여 Margin 또는 Padding을 설정하여 시스템 바와 겹치지 않도록 설정해야 합니다.
1 시스템 바의 높이를 가져옵니다.
// 안드로이드 프레임워크에서 기본적으로 설정되어 있는 값을 통해서 가져올 수 있습니다.
val resources = Resources.getSystem()
val statusBarHeight1 = resources.getDimensionPixelSize(resources.getIdentifier("status_bar_height", "dimen", "android"))
val navigationBarHeight1 = resources.getDimensionPixelSize(resources.getIdentifier("navigation_bar_height", "dimen", "android"))
}
2 뷰에 대하여 Margin 또는 Padding값을 갱신합니다.
- 이미 지정된 값이 있을 수 있으므로, 기존 값에 시스템 바의 높이를 더해줍니다.
- top, bottom에 대해서 적용할지 여부는 상황에 따라 선택합니다.
// Margin
val resources = Resources.getSystem()
val statusBarHeight = resources.getDimensionPixelSize(resources.getIdentifier("status_bar_height", "dimen", "android"))
val navigationBarHeight = resources.getDimensionPixelSize(resources.getIdentifier("navigation_bar_height", "dimen", "android"))
root.updatePadding(top = root.paddingTop + statusBarHeight, bottom = root.paddingBottom + navigationBarHeight)
3 결과
다음 주제
OneActivity 구조에서 Fragment가 변경될 때 마다 시스템 바 설정을 자동으로 변경시키는 방법에 대해 알아보겠습니다.