Android
[Android] Dialog Dim 효과 처리 방법
중곰
2024. 11. 29. 09:34
* setDimAmount(0f) vs clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND) 차이점
배경 효과 | Dim 레이어는 존재하지만 완전히 투명하게 설정됨 (0f). | Dim 레이어가 완전히 제거됨. |
Status Bar (상태바) 영향 | Dim 레이어가 상태바까지 포함하여 적용됨. | Dim 레이어가 없으므로 상태바는 전혀 영향을 받지 않음. |
Dim 강도 조절 가능 여부 | 강도를 동적으로 조절 가능 (0f ~ 1f). | 강도 조절 불가, Dim 효과가 아예 없음. |
사용 사례 | Dim 효과를 동적으로 조절해야 하는 경우. | Dim 효과가 필요 없는 Dialog에서 사용. |
System UI(시스템 UI)와의 상호작용 | Dim 강도에 따라 상태바가 투명하거나 흐릿하게 보일 수 있음. | 상태바는 항상 완전하게 보임. |
동작 방식
- setDimAmount(0f)
- 배경 Dim 의 강도를 설정하는 함수로, **0f**로 설정 시 완전히 투명하게 만듭니다.
- Dim 레이어는 여전히 화면 전체(상태바 포함)를 덮고 있으며, 강도만 조정됩니다.
- clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND)
- Dim 레이어를 제어하는 플래그를 제거하여 Dim 효과를 완전히 비활성화합니다.
- Dim 레이어 자체가 생성되지 않아 상태바와 화면 배경 모두 영향을 받지 않습니다.
언제 사용할까?
- setDimAmount(0f) 사용:
- 배경 Dim 강도를 동적으로 조절해야 하는 경우 적합합니다.
- 예: 사용자와의 상호작용에 따라 Dimming 효과를 켜거나 끄는 다이얼로그.
- clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND) 사용:
- Dim이 전혀 필요 없는 다이얼로그(예: 로더, 툴팁)에서 사용합니다.
- 상태바와 배경을 완전히 유지해야 할 때 적합합니다.
코드 예시
setDimAmount(0f) 사용 예:
val window = (LocalView.current.parent as DialogWindowProvider).window
window.setDimAmount(0f) // Dim 레이어를 완전히 투명하게 만듭니다
clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND) 사용 예:
val window = (LocalView.current.parent as DialogWindowProvider).window
window.clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND) // Dim 레이어를 완전히 제거합니다.
시각적 차이
- setDimAmount(0f):
- Dim 레이어는 투명하지만 상태바 영역도 포함되어 영향을 받음.
- ✅ 강도 조절 가능.
- ❌ 상태바가 여전히 흐릿해질 가능성 있음(강도가 0이 아닐 경우).
- Dim 레이어는 투명하지만 상태바 영역도 포함되어 영향을 받음.
- clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND):
- Dim 레이어가 생성되지 않아 상태바와 배경이 완전히 독립적.
- ✅ 상태바는 항상 영향을 받지 않음.
- ❌ Dim 효과는 불가능.
- Dim 레이어가 생성되지 않아 상태바와 배경이 완전히 독립적.
핵심 요약
- setDimAmount(0f):
- Dim 강도를 동적으로 조절하고 싶을 때 사용.
- 상태바에 영향을 주지 않으려면 추가 플래그(예: FLAG_FULLSCREEN 제거) 설정 필요.
- clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND):
- Dim 효과를 완전히 제거하고 싶을 때 사용.
- 상태바와 시스템 UI를 항상 유지하고 싶을 때 적합.
반응형