2020. 4. 10. 23:07ㆍIssueNote
[20.04.10]
목적
Animation Progress로 사용 중인 CustomDialog(Dialog 확장)에서 Background(out side) 터치 비활성화
Dialog
dialog.setCancelAble(false)
dialog.setCancelAble(false)
이 옵션은 dialog의 영역 안의 이벤트를 처리하는데, Dialog의 Style 내용과 교차로 적용되지 않는다.
적용된 Style
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:windowContentOverlay">@null</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowIsFloating">true</item>
<item name="android:backgroundDimEnabled">false</item>
<item name="android:windowIsFloating">true</item>
테스트로 이 옵션과 충돌이 나는 것을 확인하고 다이얼로그의 레이아웃을 match_parent로 xml과 programmatically 하게 둘 다 적용해도 똑같이 중심에 애니메이션 이미지를 포함하여 조그마한 영역만 dialog의 레이아웃으로 잡히는 것을 확인했습니다.
programmatically로 transparent 속성을 부여하면 레이아웃에 제대로 속성이 부여되지 않습니다.
(반복된 시도에도 이유를 찾을 수 없었습니다...)
백그라운드의 반투명을 적용해야 하기 때문에 위의 style은 가져가야 했고, 레이아웃은 일부만 잡히니 touch event나 click event는 잡을 수 없었습니다.
Dialog는 간단한 Yes No 팝업에 사용하기 좋지만 레이아웃을 커스텀하고 이벤트를 다양하게 처리하기 위해 DialogFragment를 사용했습니다.
DialogFragment
No Style
dialog?.window?.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
isCancelable = false
두 가지 속성을 사용하고 위의 문제를 해결했습니다.
Background touch와 custom layout을 사용하시려면 DialogFragment를 추천합니다.
추가로
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
return object : Dialog(activity, theme) {
override fun onBackPressed() {
// implement
}
}
}
DialogFragment에서 BackPressed 이벤트를 커스텀할 수 있는 방법입니다.
더 좋은 방법이 있다면 알려주세요!
'IssueNote' 카테고리의 다른 글
RSA private or public key is null(android with Kotlin) (0) | 2020.04.25 |
---|