안드로이드 상태 바 투명화
안드로이드 개발을 하다보면 상태 바(스테이터스 바)를 투명화 시키고 싶은 적이 있을 것이다 해당 방법을 구현하는 법은 매우 간단한데 그 방법은 다음과 같다
신버전
최근에 더욱 간편한 새로운 방법을 알게 되어서 해당 방법을 소개하겠다
enableEdgeToEdge 함수를 사용하면 된다
1
2
3
4
5
6
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
enableEdgeToEdge() // 이 부분
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
}
위와 같이 그저 함수 하나만으로도 투명화 시킬 수 있게 바꼈다 만약 버튼과 같은 뷰들이 스테이터스바와 겹치는게 맘에 들지 않는다면
1
2
3
4
5
6
7
8
9
10
11
12
private fun setupWindowInsets(view: View) {
ViewCompat.setOnApplyWindowInsetsListener(binding.root) { _, insets ->
val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars())
val statusBars = insets.getInsets(WindowInsetsCompat.Type.statusBars())
val statusBarHeight = statusBars.top
val navBarHeight = systemBars.bottom
view.setPadding(0, statusBarHeight, 0, navBarHeight)
insets
}
}
해당 함수를 통해 해결할 수 있다
구버전
1
2
3
4
5
6
window.apply {
decorView.systemUiVisibility =
View.SYSTEM_UI_FLAG_LAYOUT_STABLE or
View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
statusBarColor = Color.TRANSPARENT
}
투명화 시키고 싶은 액티비티에 해당 코드를 붙여넣기만 하면 원하던 대로 간단하게 상태 바를 투명화 시킬 수 있다
눈속임 방법
물론 위에서 설명한 투명하게 만드는 방법도 좋지만 사용하다 보면 상용 중인 앱들과 달리 그리 이쁘지도 않고 뭔가 이상함을 느낄 것이다
그럴 때 쓰기 좋은 방법이 다음으로 소개할 방법으로
1
2
<item name="android:windowLightStatusBar">true</item>
<item name="android:statusBarColor">@color/white</item>
안드로이드 테마에서 해당 코드를 사용하면 눈속임으로 깔끔하게 상태 바가 잘 안보이게 된다 해당 코드를 자세히 설명하자면
1
<item name="android:windowLightStatusBar">true</item>
이 부분은 앱 배경색이 밝으면 true, 어두우면 false로 설정하면 되고
1
<item name="android:statusBarColor">@color/white</item>
다음으로 이 부분을 배경색과 동일하게 맞추면 거슬리지 않게 상태 바를 표시할 수 있다