活动在完成 () 上不以动画形式显示.它只是消失了



我花了很多时间试图找出为什么我的活动在调用 Finish(( 时没有显示任何转换。不过,默认的显示/显示动画按预期工作。

我不想用自定义动画覆盖挂起的过渡。我只想要默认的过渡。

更新

我创建了一个全新的项目,有几个常规活动,它们按预期过渡。然后我创建了 2 个AppCompatActivity并将支持库添加到项目中,瞧,同样的问题。

这是我的主题在values上的样子:

<style name="ChefTheme" parent="ChefTheme.Base">
</style>
<style name="ChefTheme.Base" parent="Theme.AppCompat.Light.NoActionBar">
  <item name="colorPrimary">@color/primary</item>
  <item name="colorPrimaryDark">@color/primaryDark</item>
  <item name="colorAccent">@color/accent</item>
  <item name="android:windowBackground">@color/window_background</item>
</style>

这是在values-v21

<style name="ChefTheme" parent="ChefTheme.Base">
  <item name="android:windowIsTranslucent">true</item>
  <item name="android:windowDrawsSystemBarBackgrounds">true</item>
  <item name="android:windowContentTransitions">true</item>
  <item name="android:windowAllowEnterTransitionOverlap">true</item>
  <item name="android:windowAllowReturnTransitionOverlap">true</item>
  <item name="android:windowSharedElementEnterTransition">@android:transition/move</item>
  <item name="android:windowSharedElementExitTransition">@android:transition/move</item>
</style>

知道为什么会发生这种情况吗?

看起来您正在应用窗口以变为半透明,并且正在 API 21+ 设备上进行测试。

因此,如果您删除了以下行:

<item name="android:windowIsTranslucent">true</item>

它应该恢复正常。事实上,如果您不需要使用特定于材质设计的 API,则没有理由使用values-v21文件夹。但是,包含一个将通过覆盖样式来影响 API 21+ 设备。

这里最简单的解决方法是确保您知道该覆盖样式中包含的内容。

使用 finishAfterTransition() 而不是 finish() 为我解决了这个问题。我认为这是一个比覆盖过渡更干净的解决方案。如果您需要半透明窗口,这也是最佳选择。

相关内容

最新更新