45

我在理解这两个Window标志之间的区别时遇到了一些麻烦,并且不能 100% 确定何时需要使用它们以及为什么。

文档Window.FEATURE_ACTIVITY_TRANSITIONS说:

通过发送或接收使用 makeSceneTransitionAnimation(Activity, Pair[]) 或创建的 ActivityOptions 捆绑包,使活动能够运行活动转换makeSceneTransitionAnimation(Activity, View, String)

并且文档Window.FEATURE_CONTENT_TRANSITIONS说:

用于请求窗口内容更改的标志应使用TransitionManager.

使用TransitionManager设置 setTransitionManager(TransitionManager)。如果没有设置,TransitionManager将使用默认值。

文档说明以下Window方法需要FEATURE_ACTIVITY_TRANSITIONS启用该标志,但没有说明是否也FEATURE_CONTENT_TRANSITIONS需要启用该标志(请注意,根据源代码,默认情况下FEATURE_ACTIVITY_TRANSITIONStrueFEATURE_CONTENT_TRANSITIONS是针对材料主题的应用程序):false

  • get{Enter,Exit,Return,Reenter}Transition()
  • set{Enter,Exit,Return,Reenter}Transition()
  • getSharedElement{Enter,Exit,Return,Reenter}Transition()
  • setSharedElement{Enter,Exit,Return,Reenter}Transition()
  • getTransitionBackgroundFadeDuration()
  • setTransitionBackgroundFadeDuration()

换句话说,似乎基于此信息FEATURE_ACTIVITY_TRANSITIONS的是应用程序需要启用的功能标志才能使用 Lollipop 的新 Activity Transition API。然而,让我感到困惑的是, Android 开发者网站上的这篇文章指出,FEATURE_CONTENT_TRANSITIONS为了实现自定义活动转换,需要启用 。

所以这是我的问题:

  1. 这两个标志有什么区别?在这种情况下,“活动转换”和“内容转换”有什么区别?
  2. 为什么默认FEATURE_ACTIVITY_TRANSITIONS启用和FEATURE_CONTENT_TRANSITIONS禁用?何时FEATURE_CONTENT_TRANSITIONS真正需要启用标志?
  3. FEATURE_ACTIVITY_TRANSITIONS感觉禁用和启用是否有意义FEATURE_CONTENT_TRANSITIONS?或者是否也FEATURE_CONTENT_TRANSITIONS需要FEATURE_ACTIVITY_TRANSITIONS启用?

谢谢!

4

1 回答 1

47

我很高兴有机会回答这些问题,因为文档不太清楚。

早期,有一个标志FEATURE_CONTENT_TRANSITIONS可以处理这两个功能。当 Material 应用程序在启用时出现意外行为时,我们将它们拆分。因此,一些较旧的文档可能仍会说您必须启用FEATURE_CONTENT_TRANSITIONS才能获得活动转换FEATURE_ACTIVITY_TRANSITIONS

  1. 这两个标志有什么区别?在这种情况下,“活动转换”和“内容转换”有什么区别?

此上下文中的活动转换意味着您startActivity使用从该包创建的包进行调用,ActivityOptions.makeSceneTransitionAnimation或者您的活动是使用该包启动的。Activity 转换会修改你的布局(例如淡入元素、移动共享元素),所以如果你的 Activity 不喜欢这样,你应该禁用FEATURE_ACTIVITY_TRANSITIONS.

TransitionManager当您调用时setContentView(第一次除外),内容转换使用 a 。通常,您会看到交叉淡入淡出,但如果您的 Activity 的内容有共同点,例如共享 ID 或使用transitionName,您将获得ChangeBounds这些视图之间的行为。TransitionManager您可以通过使用 XML 或代码自定义与您的 Window 关联的关联来更改转换的详细信息。

  1. 为什么默认FEATURE_ACTIVITY_TRANSITIONS 启用和FEATURE_CONTENT_TRANSITIONS禁用?何时FEATURE_CONTENT_TRANSITIONS真正需要启用标志?

FEATURE_CONTENT_TRANSITIONS当您的内容发生变化时使用 TransitionManager。默认情况下,这是一个交叉淡入淡出,这对某些应用程序来说非常糟糕。另一方面,FEATURE_ACTIVITY_TRANSITIONS默认情况下不会对大多数应用程序执行任何操作。您必须选择以这种方式开始一项活动,因此开启是安全的。

  1. FEATURE_ACTIVITY_TRANSITIONS感觉禁用和启用是否有意义 FEATURE_CONTENT_TRANSITIONS?或者是否也FEATURE_CONTENT_TRANSITIONS需要 FEATURE_ACTIVITY_TRANSITIONS启用?

是的,但不太可能。如果您的应用程序喜欢FEATURE_CONTENT_TRANSITIONS,它应该可以很好地与FEATURE_ACTIVITY_TRANSITIONS. 如果您想明确限制人们使用共享元素调用您的活动,或者您不喜欢标准的进入过渡效果,您可以禁用它以防止其他应用程序调用您的活动时产生这种效果。

于 2015-03-11T14:55:14.973 回答