728x90
위에처럼 FullScreen 이면서, StatusBar가 투명으로 나오는 뷰를 그리고자 한다.
구글링 결과, 아래 사항들만 적용하면 된다고 한다. 그리고 왠만하면 Java(Kotlin) 코드로 작성하는 것 보다 XML에서 작성하고 Style 적용이 코드 유지보수에 좋아서 시도를 해봤다.
<item name="android:windowTranslucentStatus">true</item>
<item name="android:statusBarColor" tools:targetApi="lollipop">@android:color/transparent</item>
<item name="android:windowDrawsSystemBarBackgrounds" tools:targetApi="lollipop">true</item> // 시스템바를 백그라운드에 그린다.
<item name="android:windowFullscreen">true</item>
- windowTranslucentStatus : StatusBar를 반투명하게 설정한다.
- statusBarColor : StatusBar 색상을 설정한다. (API 21 이상부터 적용 가능)
- windowDrawsSystemBarBackgrounds : StatusBar를 백그라운드 위에 그린다.
- windowFullscreen : FullcreenMode 적용한다.
그런데, 결과물은 내가 예상했던것과 다르게 나왔다.
아니! 난 투명하게 하고 싶은데, statusBar 색상을 이리저리 바꿔봐도 적용이 안된다. 좌절..
window.apply {
clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS)
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) {
addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS)
statusBarColor = Color.TRANSPARENT
decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
}
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) {
decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR
}
}
내가 원하는 방향은 아니었지만, Kotlin 코드를 삽입하면서 해결이 되었다.
- clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS) : StatusBar를 투명하게 하는 옵션은 색상 변경이 안되니 삭제해야 한다.
- addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS) : StatusBar를 Background 위에 그린다.
- statusBarColor = Color.TRANSPARENT : StatusBar 컬러 변경
- decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN : FullScreen으로 변경
- decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR : StatusBar를 Light 하게 변경 (StatusBar 글자 색상을 어둡게 변경한다.)
=> 이 옵션도 상당히 중요하다. ColorPrimary 값 등 관련 Stylex.xml 변수들을 모두 바꿔봤지만 적용이 안되고 결국 해당 옵션만 적용되는 걸 확인했다.
물론, 위에 코드들을 Styles.xml에 적용을 해봤다. 안된다. (FLAG_TRANSLUCENT_STATUS 를 false로도 해보고, 옵션 자체를 안넣어 보기도 했지만 적용이 안된다.)
적용할 앱에 전체 적용이 되어야 하기 때문에, 해당 코드를 BaseActivity 코드에 작성해서 공통적용이 되도록 설정했다.
<참고 자료>
proandroiddev.com/android-full-screen-ui-with-transparent-status-bar-ef52f3adde63
'android' 카테고리의 다른 글
Compose 나도 시작해보려합니다✌️ (0) | 2022.03.30 |
---|---|
스레드간 데이터 통신 (0) | 2021.02.16 |
RxJava를 활용한 백버튼 2번 클릭으로 앱 종료시키기 (0) | 2020.10.14 |
clean Architecture 정리 (0) | 2020.08.14 |
mvvm + aac 적용 샘플 코드 (0) | 2020.05.18 |