티스토리 뷰

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>

 

  1. windowTranslucentStatus : StatusBar를 반투명하게 설정한다. 
  2. statusBarColor : StatusBar 색상을 설정한다. (API 21 이상부터 적용 가능)
  3. windowDrawsSystemBarBackgrounds : StatusBar를 백그라운드 위에 그린다. 
  4. 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 코드를 삽입하면서 해결이 되었다. 

  1. clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS) : StatusBar를 투명하게 하는 옵션은 색상 변경이 안되니 삭제해야 한다. 
  2. addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS) : StatusBar를 Background 위에 그린다. 
  3. statusBarColor = Color.TRANSPARENT : StatusBar 컬러 변경
  4. decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN : FullScreen으로 변경
  5. 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

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함