본문 바로가기
🖥 Programming/📱 Android (Kotlin)

[Android][kotlin] CustomDialog 만들기

by MinChan-Youn 2024. 6. 11.

안녕하세요~ 챠니입니다! :)

오랜만에 인사를 드리는데요~!

 

오늘은 CustomDialog 예제코드를 알아보도록 하겠습니다.

사실 Android 개발을하면서 Dialog를 만들 수 있는 방법에는 여러가지 가있는데요~

 

저희는 그중에서도 DialogFragment를 사용해서 CustomDialog를 만들어 보도록 하겠습니다!

 

기본적은 예제코드이니 다음코드를 잘 보시고, 또 주석을 확인해서 각 개발에 필요한 코드를 작성하시면 되겠습니다!

 

 

    CustomDialog 예제

    DialogFragment를 사용해서 만드는 방법은 아래와 같습니다.

     

    가장 기본적으로 onCreateView에서 레이아웃 설정 및 listener를 선언하고

     

    onResume에서는 Dialog의 화면크기 및 배경, 애니메이션 등을 적용을 합니다.

    class CustomDialog(val itemClick: (Boolean) -> Unit) : DialogFragment() {
        lateinit var binding: DialogCustomBinding
    
        init {
    
        }
    
        override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
            binding = DataBindingUtil.inflate(inflater, R.layout.dialog_permission_info, container, false)
    
            // 확인 버튼 클릭
            binding.tvPermissionInfoNext.setOnClickListener {
                //ClickEvent 전달
                itemClick(true)
    
                dismiss()
            }
    
            return binding.root
        }
    
        override fun onResume() {
            super.onResume()
    
            //Dialog FullScreen 적용
            dialog?.window?.setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)
    
            //배경 투명적용
            dialog?.window?.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
    
            //뒤배경을 어둡게만드는 flag를 제거
            dialog?.window?.clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND)
    
            //Animation 적용
            dialog?.window?.setWindowAnimations(R.style.PermissionDialogAnimation)
    
            //뒤로가기 막기
            dialog?.setCancelable(false)
        }
    }

     

     

     

    CustomDialog 예제 이미지

     

     

     

    style.xml 파일

    애니메이션 style파일은 다음과 같습니다.

     

    style.xml

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <style name="PermissionDialogAnimation">
            <item name="android:windowEnterAnimation">@anim/slide_in_bottom</item>
            <item name="android:windowExitAnimation">@anim/slide_out_bottom</item>
        </style>
    </resources>

     

     

    slide_in_bottom.xml

    <translate xmlns:android="http://schemas.android.com/apk/res/android"
        android:duration="350"
        android:fromYDelta="100%"
        android:interpolator="@android:anim/decelerate_interpolator"
        android:toYDelta="0%" />

     

    slide_out_bottom.xml

    <translate xmlns:android="http://schemas.android.com/apk/res/android"
        android:duration="350"
        android:fromYDelta="0%"
        android:interpolator="@android:anim/decelerate_interpolator"
        android:toYDelta="100%" />

     

     

    질문 또는 궁굼한 부분은 댓글을 남겨주세요! 친절하게 답변드리겠습니다!

    응원의 댓글은 저에게 큰 힘이 된답니다! :)

    즐거운 하루되세요!

     

    깃허브 보러 놀러오세요 👇 (맞팔환영)

    https://github.com/younminchan 

     

    younminchan - Overview

    •🇰🇷/👨🏻‍💻/🖥/⚽️/🎤/🥁/🏃‍♂️/🚴‍♂️/🏄🏻‍♂️/🤟 •TechBlog⬇️ •안드로이드 4년차 개발자 https://minchanyoun.tistory.com - younminchan

    github.com