일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 개발 포지션 변경
- spring responseEntity response cause
- OS 자원관리
- 운영체제 공룡책
- spring paging sort sql injection
- spring dynamic query sql injection
- 운영체제 자원관리
- ec2 scp 파일 전송
- spring exception stackTrace remove
- 운영체제 멀티 태스킹
- android 타이머
- spring exceptionHandler response cause
- 개발 직무 변경
- aws ec2 scp 파일 전송
- 운영체제 작동방식
- 운영체제 다중모드
- spring responseEntity response stackTrace
- 백엔드 직무 변경
- IT 포지션 변경
- Android Timer
- spring exceptionHandler reposnse stackTrace
- 운영체제 개념
- IT 직무 변경
- spring 동적 쿼리 주의사항
- 백엔드 포지션 변경
- spring sql injection 방지
- spring sql injection
- 운영체제 멀티 프로그래밍
- spring exception cause remove
- 운영체제 커널모드
- Today
- Total
오늘도 삽질중
Android Status bar 투명처리 본문
상태바를 투명하게 만드는 방법은 여러 블로그에서 다루고 있습니다.
저 또한 해당방법으로 적용한 결과 2가지 문제점이 발생했습니다.
1. 상태바의 시간,아이콘 까지 투명처리 되어 보이지 않는다.
2. 상단에 뷰를 추가할 경우 상태바 영역까지 겹쳐진다.
해당 문제가 발생한 스크린샷입니다.
우선 시간이나 아이콘은 투명처리 되어 안보이는 상태이며, 제가 터치로 상태바를 임시로 보인 상황입니다.
잘 보시면 상단아이콘 버튼이 상태바에 걸려 디자인 가이드대로 작업 진행이 안됩니다.
제가 원하는 동작방식은
1. 배경화면과 대조되어 상태바의 시간이나, 아이콘 색상이 변경되어야 한다.
2. 상태바의 영역은 유지되어 뷰를 배치해도 영역을 침범해서는 안된다.
위 2가지 조건을 충족하도록 작업을 진행해보겠습니다.
참고로 해당 방법은 롤리팝 이후부터 원하는 대로 동작됩니다.
롤리팝 이전에는 기존 스택오버플로우 코드를 참고하여 작업했으니 참고해주세요.
우선 Style.xml 을 따로 건드리지 않았습니다.
기존 그대로 사용합니다.
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
</style>
그 다음 Activity 의 onCreate 에 해당 코드를 추가합니다.
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.LOLLIPOP_MR1) {
window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS)
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS)
window.statusBarColor = ContextCompat.getColor(this, R.color.colorAccent)
} else {
//검정계열일 경우 주석처리
//흰색의 밝은 계열일 경우 주석해제
// window.decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR
//바인딩을 사용하지 않는다면
window.statusBarColor =
((findViewById<ViewGroup>(android.R.id.content)).getChildAt(0).background as ColorDrawable).color
//바인딩을 사용한다면
window.statusBarColor = (binding.root.background as ColorDrawable).color
}
}
주석을 보시면 충분히 상황에 맞게 사용하실 수 있을꺼라 생각합니다.
저는 해당 코드를 모든 Activity가 상속해서 사용하는 BaseActivity에 추가했습니다.
해당 코드를 사용하게 되면 꼭! 해주셔야 하는 작업이 있습니다.
바로 해당 xml 의 최상위 그룹뷰에 백그라운드를 설정해야 합니다.
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#000"
android:paddingStart="16dp"
android:paddingEnd="16dp">
백그라운드를 설정하지 않을경우 크래쉬가 발생하여 앱이 종료됩니다.
그러니 반드시 백그라운드를 설정해주시는걸 잊지 마세요.
백그라운드 흰색계열 ( bacogrund="#fff")
백그라운드 검정계열 ( bacogrund="#000")
위 코드에 주석을 달아놨지만 바탕화면이 검정계열일 경우
window.decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR
이 부분을 꼭 주석처리하셔야 상태바에 흰색으로 대조되어 확인이 가능합니다.
이유는 찾아봤는데 잘 모르겠네요. 아시는 분은 알려주시면 감사하겠습니다.
'안드로이드' 카테고리의 다른 글
Android BehaviorSubject 사용해보기 (0) | 2021.02.18 |
---|---|
Android Frame Rounding Custom View (0) | 2021.01.26 |
Android 특정 이미지만 trying to use a recycled bitmap 에러가 발생한다면? (0) | 2021.01.21 |
Android Rxbinding 과 combineLatest 를 사용해보자 (0) | 2021.01.20 |
android Oreo 이상 앱 종료시점 (0) | 2020.12.18 |