Android 如何在恢复应用程序时禁用DialogFragment转换动画?
我有以下逻辑为我的DialogFragment设置自定义动画,以便在Kotlin中从右侧屏幕滑入和滑出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加载时恢复动画 在我看来,当我重新打开应用程序时,看
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
}
}