티스토리 뷰

728x90

 

AlertDialog.Builder(this)
    .setTitle("Title")
    .setMessage("Message")
    .create()
    .show()

안드로이드에서 제공하는 기본 다이얼로그를 사용하려면 위와 비슷하게 작성하면 된다.

 

하지만 다이얼로그의 ui를 변경하거나 특정 로직을 더 넣고 싶다면 커스텀 다이얼로그를 구현해야 한다.

커스텀 다이얼로그를 구현하는 방법은 크게 두 가지가 있다.

 

FragmentDialog를 확장하는 방법과, manifest의 theme를 dialog로 변경하는 방법이다.

 

 

 

< FragmentDialog >

FragmentDialog를 상속받아 구현하는 방법이다.

FragmentDialog도 Fragment의 일종이므로 Fragment의 생명주기를 활용할 수 있다.

Dialog 클래스를 상속받아서 커스텀 다이얼로그를 구현할 수 있는데, 위와 같은 이유로 안드로이드에서는 Dialog를 상속받는 것보다 FragmentDialog를 상속받는 것을 권장하고 있다.

 

1. dialog xml 파일 생성하기

이 예제에서는 xml 파일명이 dialog_custom이라고 가정했다.

따로 고려할 것없이 필요한 뷰들을 자유롭게 넣으면 된다.

 

 

2. dialog 코틀린 파일 작성하기

class CustomDialog : DialogFragment() {
    private lateinit var binding: DialogCustomBinding

    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
        binding = DialogCustomBinding.inflate(inflater, container, false)	
        dialog?.window?.setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)
        isCancelable = false
        //...
        return binding.root
    }

    override fun onDestroyView() {
        super.onDestroyView()
    }
}

FragmentDialog를 상속받은 커스텀 다이얼로그의 코틀린 코드다.

이외에 필요한 로직을 추가하면 된다.

이 예제에서는 데이터 바인딩을 사용했다.

 

        dialog?.window?.setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)

FragmentDialog의 기본 크기는 0x0이기 때문에 xml에서 match_parent를 적용해도 화면 전체를 차지하지 않는다.

match_parent를 의도에 맞게 사용하기 위해서는 위 코드를 inflate 후에 작성해야 한다.

만약 다이얼로그의 크기를 전체 화면 기준으로 지정하지 않고, 특정 px나 dp를 사용한다면 이 설정은 굳이 사용하지 않아도 된다.

 

	isCancelable = false

isCancelable을 false로 지정하면 다이얼로그 바깥을 클릭하거나 뒤로 가기 버튼을 눌러도 다이얼로그가 사라지지 않는다.

나는 exit 버튼을 눌러야만 다이얼로그가 닫히도록 구현했기 때문에 false로 두었다.

상황에 맞게 사용하면 될 것 같다!

 

 

3. dialog를 띄울 activity 코드

        binding.button.setOnClickListener {
            CustomDialog().show(supportFragmentManager, "dialog")
        }

나는 특정 액티비티에서 버튼을 누르면 커스텀 다이얼로그가 띄워지도록 구현했다.

방금 만든 커스텀 다이얼로그 클래스를 생성하고, show()를 호출해서 화면에 띄운다.

 

 

 

 

< manifest theme 사용하기 >

Dialog를 하나의 Activity로 사용하는 방법이다.

Activity를 화면에 띄우려면 manifest에 등록해야 하는데, 이 때 theme를 dialog로 설정한다.

 

1. xml, Activity 코드

일반 xml과 Activity를 구현하는 것과 동일하게 필요한 로직을 적는다.

        supportRequestWindowFeature(Window.FEATURE_NO_TITLE)

이때 Activity에서 위 코드 한줄을 onCreate()에 추가한다.

TITLE_BAR가 없어야 다이얼로그처럼 보이기 때문이다.

 

 

2. AndroidManifest.xml

<activity android:name=".DialogActivity"
            android:theme="@style/Theme.AppCompat.DayNight.Dialog">
</activity>

theme를 Dialog로 변경하는 것이 가장 중요하다!

 

 

3. dialog를 띄울 activity 코드

        binding.button.setOnClickListener {
                startActivity(Intent(this, DialogActivity::class.java))
        }

Activity에서 Activity로 이동하는 것과 동일하게 Intent를 전달한다.

 

 

 

728x90
250x250
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/01   »
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 31
글 보관함