[Android] XML 다이얼로그 배경 Dim 투명도 조절하기

easyhooon·2023년 2월 7일


사진과 같은 화면을 구현해야 하는 일이 생겨 작업을 진행하다가
Android의 다이얼로그를 열었을 경우 기본 dim 투명도와 시안의 투명도가 다르다는 것을 발견하였다.

시안이 배경이 더 어둡기 때문에(alpha 값이 높음) 어떻게 하면 더 어둡게 설정할 수 있을지 검색을 해보았고 답을 찾을 수 있었다.(글 맨 마지막 레퍼런스 확인)

기본 다이얼로그 테마 적용시 Dim 색상(살짝 밝다는 것을 확인할 수 있다)

styles

    <style name="OnBoardingDialog" parent="@style/Theme.MaterialComponents.Dialog">
        <item name="android:background">@android:color/transparent</item>
        <item name="android:backgroundDimEnabled">true</item>
        <item name="android:backgroundDimAmount">0.72</item>
    </style>

backgroudDimEnabled 는 default 가 true 이므로 생략해도 된다.
true 로 설정될 경우 system 에 지정된 color 를 통해 바깥 영역을 어둡게 처리한다.

DimAmount 를 통해 DimAlpha 값을 조절할 수 있으며, 1에 가까울 수록 어둡다

Dim 처리를 아예 하지 않고 싶다면 backgroundDimEnabled 속성을 false 로 설정하거나

context?.let {
            dialog?.let { dialog ->
                dialog.window?.clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND)
            }
        }

dialog 내에서 해당 flag 코드를 적용해주면 된다.

styles 파일 내에서 custom style 을 만들었다면


override fun getTheme(): Int = R.style.OnBoardingDialog

dialog 내에서 getTheme() 함수를 override 하여 속성을 적용해줘야 화면에 반영이 된다. 빼먹고 적용이 안된다는 질문 글들을 많이 본 것 같다.

참고 문서)
https://developer.android.com/reference/android/view/WindowManager.LayoutParams

https://aroundck.tistory.com/6163

https://stackoverflow.com/questions/29227126/how-can-i-change-default-black-dim-background-color-not-the-amount-of-dim-of

https://itpangpang.tistory.com/291

https://stackoverflow.com/questions/10795078/dialog-with-transparent-background-in-android

https://onlyfor-me-blog.tistory.com/136

profile
실력은 고통의 총합이다. Android Developer

0개의 댓글