Android 如何在恢复应用程序时禁用DialogFragment转换动画?

Android 如何在恢复应用程序时禁用DialogFragment转换动画?,android,kotlin,android-animation,android-dialogfragment,Android,Kotlin,Android Animation,Android Dialogfragment,我有以下逻辑为我的DialogFragment设置自定义动画,以便在Kotlin中从右侧屏幕滑入和滑出 dialog?.window?.attributes?.windowAnimations = R.style.dialog_style 一切都很好,但当我进入手机的主屏幕,有效地将我的应用程序放到背景中,然后当我把它拿回来时,我看到动画也被激活了 是否有一种方法可以在我从后台重新打开应用程序时临时禁用动画,然后在DialogFragment加载时恢复动画 在我看来,当我重新打开应用程序时,看

我有以下逻辑为我的DialogFragment设置自定义动画,以便在Kotlin中从右侧屏幕滑入和滑出

dialog?.window?.attributes?.windowAnimations = R.style.dialog_style
一切都很好,但当我进入手机的主屏幕,有效地将我的应用程序放到背景中,然后当我把它拿回来时,我看到动画也被激活了

是否有一种方法可以在我从后台重新打开应用程序时临时禁用动画,然后在DialogFragment加载时恢复动画

在我看来,当我重新打开应用程序时,看到DialogFragment转换看起来很奇怪,如果没有动画(默认样式),效果会更好


我希望自定义动画仅在我在应用程序中的片段之间导航时应用,但在片段从后台状态恢复(暂停?)时不应用动画。

我使用
savedInstanceState
检查应用程序是否正在重新打开,并将
windowEnterAnimation
设置为空。这是我的解决办法

首先,创建两种样式

<style name="Animation.MyApp.CustomDialogFragment">
    <item name="android:windowEnterAnimation">@anim/slide_in</item>
    <item name="android:windowExitAnimation">@anim/slide_out</item>
</style>

<style name="Animation.MyApp.CustomDialogFragment.Restore">
    <item name="android:windowEnterAnimation">@null</item>
</style>

在onCreateDialog中对我不起作用,因为它在应用程序后台很短时间内没有调用。如果对话框片段到达顶部,我最终保存了一个布尔指示符,然后在onStart中,如果布尔值为真,我用空动画设置了新样式,效果很好。
open class CustomDialogFragment : DialogFragment() {

    override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
        val dialog = super.onCreateDialog(savedInstanceState)

        if (savedInstanceState == null) {
            dialog.window?.setWindowAnimations(
                R.style.Animation_MyApp_CustomDialogFragment
            )
        } else {
            dialog.window?.setWindowAnimations(
                R.style.Animation_MyApp_CustomDialogFragment_Restore
            )
        }

        return dialog
    }
}