FEATURE_ACTIVITY_TRANSITIONS与FEATURE_CONTENT_TRANSITIONS
我有一些麻烦了解这两个Window
标志之间的差异,并不是100%确定何时每个需要使用和为什么。
Window.FEATURE_ACTIVITY_TRANSITIONS
的文档说:
使Activity能够通过发送或接收使用
makeSceneTransitionAnimation(Activity, Pair[])
或makeSceneTransitionAnimation(Activity, View, String)
创build的ActivityOptions包来运行活动转换。
而Window.FEATURE_CONTENT_TRANSITIONS
的文档说:
用于请求窗口内容更改的标志应该使用
TransitionManager
进行animation处理。
TransitionManager
是使用setTransitionManager(TransitionManager)
。 如果没有设置,将使用默认的TransitionManager
。
该文档指出,以下Window
方法需要启用FEATURE_ACTIVITY_TRANSITIONS
标志,但不要说FEATURE_CONTENT_TRANSITIONS
是否也需要启用(请注意,根据源代码 , FEATURE_ACTIVITY_TRANSITIONS
为true
, FEATURE_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的新的活动转换API的function标志。 然而,我感到困惑的是,Android Developers网站的这篇文章指出,为了实现自定义活动转换,需要启用FEATURE_CONTENT_TRANSITIONS
。
所以这是我的问题:
- 这两个标志有什么区别? 在这种情况下,“活动转型”和“内容转型”之间有什么区别?
- 为什么
FEATURE_ACTIVITY_TRANSITIONS
启用并且FEATURE_CONTENT_TRANSITIONS
被默认禁用?FEATURE_CONTENT_TRANSITIONS
实际需要的FEATURE_CONTENT_TRANSITIONS
标志? - 感觉禁用
FEATURE_ACTIVITY_TRANSITIONS
并启用FEATURE_CONTENT_TRANSITIONS
是否合理? 或者FEATURE_CONTENT_TRANSITIONS
需要启用FEATURE_ACTIVITY_TRANSITIONS
?
谢谢!
我很高兴有机会回答这些问题,因为文档不够清晰。
早些时候,有一个标志FEATURE_CONTENT_TRANSITIONS
处理这两个function。 当Material应用程序在启用时出现意外的行为时,我们将它们分开。 所以一些较老的文档可能仍然会说,当FEATURE_ACTIVITY_TRANSITIONS
意味着FEATURE_ACTIVITY_TRANSITIONS
时,您必须启用FEATURE_CONTENT_TRANSITIONS
才能获得活动转换。
- 这两个标志有什么区别? 在这种情况下,“活动转型”和“内容转型”之间有什么区别?
此上下文中的活动转换意味着您使用从ActivityOptions.makeSceneTransitionAnimation
创build的包调用startActivity
,或者,您的活动是从该包开始的。 活动转换修改您的布局(例如淡入的元素,移动共享元素),所以如果你的活动不喜欢,你应该禁用FEATURE_ACTIVITY_TRANSITIONS
。
当您调用setContentView
(第一次除外)时,内容转换将使用TransitionManager
。 通常情况下,您将获得交叉淡入淡出效果,但是如果您的“活动”内容具有共同的内容(如共享ID或使用transitionName
,则会在这些视图之间获得ChangeBounds
行为。 您可以通过使用XML或代码自定义与Window关联的TransitionManager
来更改转换的详细信息。
- 为什么
FEATURE_ACTIVITY_TRANSITIONS
启用并且FEATURE_CONTENT_TRANSITIONS
被默认禁用?FEATURE_CONTENT_TRANSITIONS
实际需要的FEATURE_CONTENT_TRANSITIONS
标志?
当内容改变时, FEATURE_CONTENT_TRANSITIONS
使用TransitionManager。 默认情况下,这是一个交叉淡入淡出,这对于某些应用程序来说是非常糟糕的。 另一方面, FEATURE_ACTIVITY_TRANSITIONS
默认对大多数应用程序没有任何作用。 你必须select以这种方式开始一个活动,所以打开是安全的。
- 感觉禁用
FEATURE_ACTIVITY_TRANSITIONS
并启用FEATURE_CONTENT_TRANSITIONS
是否合理? 或者FEATURE_CONTENT_TRANSITIONS
需要启用FEATURE_ACTIVITY_TRANSITIONS
?
是的,但不太可能。 如果您的应用程序喜欢FEATURE_CONTENT_TRANSITIONS
,则应该使用FEATURE_ACTIVITY_TRANSITIONS
。 如果您想显式地限制用户使用共享元素调用您的活动,或者您不喜欢标准input转换效果,则可以禁用它以阻止其他应用程序调用您的活动时的效果。