반응형
안녕하세요! 오늘은 제가 개발하면서 오랫동안 삽집했던 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의 높이 패딩으로 설정하시면 마무리됩니다!
결과


참고
[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 |