[안드로이드 / Kotlin] Status bar 투명하게 (with DrawerLayout)

2022. 5. 18. 13:35·Android
반응형

안녕하세요! 오늘은 제가 개발하면서 오랫동안 삽집했던 DrawLayout을 이용한 Navigation을 구성 시 Status bar 를 투명하게 하는 방법에 대해 알려드리고자 합니다.

문제 상황 : DrawerLayout 과 Navigation 사용시 Status bar 영역까지 꽉차지 않는 상황

해결방안

1. DrawerLayout 및 NavigationView에 fitsSystemWindows="true" 속성 추가하기

<androidx.drawerlayout.widget.DrawerLayout
    android:id="@+id/drawer_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true"
    tools:openDrawer="start">

    ...

    <com.google.android.material.navigation.NavigationView
        android:id="@+id/navigation"
        android:layout_width="260dp"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        android:background="@color/splash_background"
        android:fitsSystemWindows="true"
        app:headerLayout="@layout/nav_header_main" />

</androidx.drawerlayout.widget.DrawerLayout>

fitsSystemWindows="true" :

상태 표시줄과 같은 시스템 창을 기반으로 보기 레이아웃을 조정하는 속성.

true 이면 시스템 창을 위한 공간을 남기기 위해 패딩을 조정합니다.  즉 Status bar나 Navigation bar를 포함한 전체 창 크기에 맞게 레이아웃을 조정해줍니다!

2. 소스코드 

window.setFlags(
    WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS,
    WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS
)

<WindowManager.LayoutParams 관련 속성>

FLAG_LAYOUT_IN_SCREEN : 상위 창의 제약 조건을 무시하고 전체 화면 내에 창을 배치합니다.

FLAG_LAYOUT_NO_LIMITS : 창이 화면 외부로 확장되도록 허용합니다.

fun getStatusBarHeight(context: Context): Int {
    val resourceId = context.resources
        .getIdentifier("status_bar_height", "dimen", "android")

    return if(resourceId > 0) context.resources.getDimensionPixelSize(resourceId) else 0
}
container.setPadding(0, Utils.getStatusBarHeight(this@MainActivity), 0, 0)

코드에서 flag까지 조정했다면 아마 상태 표시줄까지 화면이 올라간 모습을 보실 수 있습니다.

그렇다면 상태표시줄 높이만큼의 패딩을 줌으로서 최종적으로 원하는 화면을 구성하실 수 있습니다. 

상태 표시줄의 높이를 구했다면 이를 화면 제일 상위 layout의 높이 패딩으로 설정하시면 마무리됩니다!

결과

 

 

참고

https://velog.io/@yujeong136/Android-status-bar-%ED%88%AC%EB%AA%85%ED%95%98%EA%B2%8C-%EB%A7%8C%EB%93%A4%EA%B8%B0-drawer-layout

 

[Android] status bar 투명하게 만들기 + drawer layout

drawer layout _ drawer layout이 status바 위를 가리면서 표시되길 바람. > 화면에 딱 맞게 & status bar를 투명하게 만들자.

velog.io

 

반응형

'Android' 카테고리의 다른 글

[안드로이드 / Kotlin] Clean Architecture 개념  (0) 2022.09.18
[안드로이드 / Kotlin] 소스코드 수정 없이 debug/release 앱 분리하기  (0) 2022.05.29
[안드로이드 / Kotlin] Dagger Hilt  (0) 2022.05.17
[안드로이드 / Kotlin] Room  (0) 2022.04.27
[안드로이드 / Kotlin] ViewModel(뷰모델)  (0) 2022.04.12
'Android' 카테고리의 다른 글
  • [안드로이드 / Kotlin] Clean Architecture 개념
  • [안드로이드 / Kotlin] 소스코드 수정 없이 debug/release 앱 분리하기
  • [안드로이드 / Kotlin] Dagger Hilt
  • [안드로이드 / Kotlin] Room
서주냥
서주냥
안드로이드 개발 관련 끄적임
  • 서주냥
    AOS가 아니라 안드로이드
    서주냥
  • 전체
    오늘
    어제
    • 전체보기 (59)
      • 알고리즘 (12)
        • 백준 (4)
        • 프로그래머스 (5)
        • 개념 (3)
      • Android (44)
        • Compose (2)
      • Java (2)
      • Kotlin (1)
  • 링크

    • GitHub
  • 인기 글

  • 태그

    ConstraintLayout
    Coroutine Flow
    알고리즘
    SnackBar
    클린 아키텍처
    백준
    컴포즈
    Clean Architecture
    벨만 포드
    코틀린
    FusedLocationProviderClient
    코루틴
    프로그래머스
    다이나믹 프로그래밍
    viewpager2
    블루투스
    투 포인터
    Hilt
    자바
    뷰모델
    reified
    RecyclerView
    debounce
    textunit
    최단 경로
    BLE
    안드로이드
    lineHeight
    Coroutine
    textstyle
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
서주냥
[안드로이드 / Kotlin] Status bar 투명하게 (with DrawerLayout)
상단으로

티스토리툴바