chacha's

🧭 Navigation을 이용해서 Dialog로 전환하기 본문

Android/My Library

🧭 Navigation을 이용해서 Dialog로 전환하기

Cha_Cha 2021. 6. 9. 14:13
 Navigating to Dialog Destinations - Medium post
 Navigation: Dialog destinations - MAD Skills - Youtube
 Dialogs - Documentation
 Create destinations - Documentation
 Dialogs - material.io
 AlterDialog - Documentation
 MAD Skills Navigation Sample - Github
 androidx.compose.material.AlterDialog - Documentation
 를 참고하여 작성한 게시물입니다.

 

 

 🧭Navigation을 이용해서 Dialog로 전환하기

1. DialogFragment를 상속받는 Fragment와 xml을 생성합니다.

class RepeatCountDialogFragment : DialogFragment() {
    private lateinit var repeatCountBinding: DialogRepeatCountBinding

    override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        val binding = DialogRepeatCountBinding.inflate(inflater, container, false)
        repeatCountBinding = binding
        return binding.root
    }
}

2. Navigation graph 파일에 dialog tag를 추가하고 Fragment에서 Dialog를 목적지로 하는 액션을 추가합니다.

    <dialog
        android:id="@+id/repeatCountDialogFragment"
        android:name="com.android.samples.navdialogsample.RepeatCountDialogFragment"
        android:label="RepeatCountDialogFragment"
        tools:layout="@layout/dialog_repeat_count" />

3. 출발지 Fragment에 Dialog로 이동하는 로직 추가하기

        binding.registerRepeatTv.setOnClickListener { view ->
            view.findNavController().navigate(
                RegisterScheduleFragmentDirections.actionRegisterScheduleToRepeatSchedule())
        }

 

 🎨 Dialog Background color 제거하기

 Dialog with transparent background in Android - StackOverflow
 를 참고하였습니다.

출처 : https://stackoverflow.com/questions/10795078

위의 사진과 같은 문제를 만나서 xml에서 background 속성을 통해 제거해보려해 했지만 해결되지 않았습니다. StackOverflow 게시물을 참고하여 Dialog를 생성하는 onCreateDialog 메서드를 아래와 같이 수정하면 backgroundColor가 사라지고 RoundedBox만 남게됩니다.

    override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
        val dialog = super.onCreateDialog(savedInstanceState)
        dialog.window?.setBackgroundDrawableResource(android.R.color.transparent);
        return dialog
    }

 

Comments