Mihaela Romanca
Mihaela Romanca

Reputation: 1368

Android Navigation: Keep previous fragment behind dialog. Works only with BottomSheetDialogFragment

I have a video application - a video list and tapping on an item goes to video details. I want video details to be a full screen dialog fragment (to be able to do the motion layout animation from here https://medium.com/vrt-digital-studio/picture-in-picture-video-overlay-with-motionlayout-a9404663b9e7). But the previous dialog is not preserved behind (a blank screen is displayed). Weird enough BottomSheetDialogFragment works but DialogFragment does not.

So the question is - Should a dialog fragment have the previous fragment displayed under it when using jetpack navigation? Why bottom sheet works and dialog not?

Navigation is done using android jetpack navigation:

<action
            android:id="@+id/action_videosFragment_to_video_details_nav_graph"
            app:destination="@id/video_details_nav_graph"/>

and details nav graph:

<navigation xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/video_details_nav_graph"
    app:startDestination="@id/videoDetailsFragment">

    <dialog
        android:id="@+id/videoDetailsFragment"
        android:name="com.myapp.mobile.ui.video.VideoDetailsFragment"
        android:label="VideoDetailsFragment"
        tools:layout="@layout/fragment_video_details">
    </dialog>
</navigation>

Am I missing something? Thanks

Upvotes: 0

Views: 871

Answers (1)

Mihaela Romanca
Mihaela Romanca

Reputation: 1368

After looking more into it, managed to make it work with:

    override fun onStart() {
        super.onStart()
        val dialog: Dialog? = dialog
        if (dialog != null) {
            val width = ViewGroup.LayoutParams.MATCH_PARENT
            val height = ViewGroup.LayoutParams.MATCH_PARENT
            dialog.window?.setLayout(width, height)
            dialog.window?.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
            dialog.window?.clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND)
        }
    }

Upvotes: 1

Related Questions