【问题标题】:How to disable DialogFragment transition animation when resuming the application?恢复应用程序时如何禁用DialogFragment过渡动画?
【发布时间】:2020-09-16 01:04:52
【问题描述】:

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

dialog?.window?.attributes?.windowAnimations = R.style.dialog_style

一切都很棒,但是当我转到手机的主屏幕并将我的应用程序有效地置于后台时,当我将其带回来时,我看到动画也激活了。

有没有办法在我从后台重新打开应用程序时暂时禁用动画,然后在 DialogFragment 加载时恢复动画。

在我看来,当我重新打开应用程序时看到 DialogFragment 过渡看起来很奇怪,当没有动画时它看起来更好(默认样式)

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

【问题讨论】:

    标签: android kotlin android-animation android-dialogfragment


    【解决方案1】:

    我使用savedInstanceState 来检查应用程序是否正在重新打开并将windowEnterAnimation 设置为null。这是我的解决方案。

    首先,创建两个样式。

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

    然后,从 DialogFragment 覆盖 onCreateDialog()

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

    【讨论】:

    • 在 onCreateDialog 中对我不起作用,因为它在应用程序后台短时间后没有被调用。如果对话框片段到达 onStop,我最终保存了一个布尔指示符,然后如果布尔值为 true,则在 onStart 中保存我使用 null 动画设置新样式并且效果很好。
    • @ItayFeldman 为什么要保持布尔值,如果 onStop 被调用,onStart 也会被调用?这将禁用用户的退出动画,这不是我想要的。
    猜你喜欢
    • 2020-04-04
    • 2017-12-04
    • 1970-01-01
    • 2020-05-25
    • 1970-01-01
    • 2023-02-05
    • 1970-01-01
    • 2019-01-10
    • 2011-11-04
    相关资源
    最近更新 更多