如何解决恢复应用程序时如何禁用DialogFragment过渡动画?
我具有以下逻辑,可以为我的DialogFragment设置自定义动画,以使其在Kotlin的右手屏幕中滑入和滑出。
dialog?.window?.attributes?.windowAnimations = R.style.dialog_style
一切都很棒,但是当我进入手机的主屏幕并有效地将应用程序置于后台,然后将其放回时,我看到动画也被激活。
每当我从后台重新打开应用程序时,是否有一种方法可以暂时禁用动画,然后在DialogFragment加载时恢复动画。
我认为重新打开应用程序时看到DialogFragment过渡看起来很奇怪,没有动画(默认样式)时看起来更好
我希望自定义动画仅在我在应用程序中的片段之间导航时才应用,而当片段从后台状态恢复(暂停?)时不应用动画。
解决方法
我使用 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
}
}