首页 > 解决方案 > Android 导航:将前一个片段保留在对话框后面。仅适用于 BottomSheetDialogFragment

问题描述

我有一个视频应用程序 - 一个视频列表并点击一个项目会转到视频详细信息。我希望视频详细信息成为全屏对话框片段(能够从这里https://medium.com/vrt-digital-studio/picture-in-picture-video-overlay-with-motionlayout进行运动布局动画-a9404663b9e7)。但是前面的对话框并没有保留在后面(显示一个空白屏幕)。奇怪的 BottomSheetDialogFragment 有效,但 DialogFragment 无效。

所以问题是 - 使用喷气背包导航时,对话框片段是否应该显示前一个片段?为什么底部工作表有效而对话框无效?

导航是使用 android jetpack 导航完成的:

<action
            android:id="@+id/action_videosFragment_to_video_details_nav_graph"
            app:destination="@id/video_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>

我错过了什么吗?谢谢

标签: androidandroid-dialogfragmentandroid-jetpack-navigation

解决方案


在对其进行了更多研究之后,设法使其与:

    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)
        }
    }

推荐阅读