FEATURE_ACTIVITY_TRANSITIONS 对比 FEATURE_CONTENT_TRANSITIONS
FEATURE_ACTIVITY_TRANSITIONS vs. FEATURE_CONTENT_TRANSITIONS
我在理解这两个 Window
标志之间的区别时遇到了一些麻烦,我不能 100% 确定何时需要使用每个标志以及为什么需要使用它们。
Window.FEATURE_ACTIVITY_TRANSITIONS
的文档说:
Enables Activities to run Activity Transitions either
through sending or receiving ActivityOptions bundle created with
makeSceneTransitionAnimation(Activity, Pair[])
or makeSceneTransitionAnimation(Activity, View, String)
.
Window.FEATURE_CONTENT_TRANSITIONS
的文档说:
Flag for requesting that window content changes should
be animated using a TransitionManager
.
The TransitionManager
is set using
setTransitionManager(TransitionManager)
.
If none is set, a default TransitionManager
will be used.
文档指出以下 Window
方法需要启用 FEATURE_ACTIVITY_TRANSITIONS
标志,但没有说明 FEATURE_CONTENT_TRANSITIONS
是否也需要启用(注意根据 源代码 ,FEATURE_ACTIVITY_TRANSITIONS
是 true
并且 FEATURE_CONTENT_TRANSITIONS
是 false
对于 material 主题的应用程序默认):
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 转换 API。然而,让我感到困惑的是,来自 Android 开发者网站的 this article 声明需要启用 FEATURE_CONTENT_TRANSITIONS
才能实现自定义 activity 转换。
所以这是我的问题:
- 这两个标志有什么区别? "activity transition" 和 "content transition" 在这种情况下有什么区别?
- 为什么默认启用
FEATURE_ACTIVITY_TRANSITIONS
而禁用FEATURE_CONTENT_TRANSITIONS
?什么时候真正需要启用 FEATURE_CONTENT_TRANSITIONS
标志?
- 禁用
FEATURE_ACTIVITY_TRANSITIONS
并启用 FEATURE_CONTENT_TRANSITIONS
是否有意义?或者 FEATURE_CONTENT_TRANSITIONS
是否也需要启用 FEATURE_ACTIVITY_TRANSITIONS
?
谢谢!
我很高兴有机会回答这些问题,因为文档尚不清楚。
早期,有一个标志 FEATURE_CONTENT_TRANSITIONS
可以处理这两种功能。当 Material 应用程序在启用时出现意外行为时,我们将它们拆分。所以一些较旧的文档可能仍然说你必须启用 FEATURE_CONTENT_TRANSITIONS
才能获得 activity 转换,而它们意味着 FEATURE_ACTIVITY_TRANSITIONS
.
- What is the difference between these two flags? What is the
difference between an "activity transition" and a "content
transition" in this context?
在此上下文中的 activity 转换意味着您使用从 ActivityOptions.makeSceneTransitionAnimation
创建的包调用 startActivity
或者,您的 activity 是从该包开始的。 Activity 过渡会修改您的布局(例如淡入淡出元素、移动共享元素),因此如果您的 activity 不喜欢这样,您应该禁用 FEATURE_ACTIVITY_TRANSITIONS
.
当您调用 setContentView
时(第一次除外),内容转换使用 TransitionManager
。通常情况下,你会得到一个淡入淡出,但如果你的 Activity 的内容有共同点,例如共享 ID 或使用 transitionName
,你会得到 ChangeBounds
之间的行为那些意见。您可以使用 XML 或代码自定义与您的 Window 关联的 TransitionManager
来更改转换的详细信息。
- Why is
FEATURE_ACTIVITY_TRANSITIONS
enabled and FEATURE_CONTENT_TRANSITIONS
disabled by default? When is
enabling the FEATURE_CONTENT_TRANSITIONS
flag actually required?
FEATURE_CONTENT_TRANSITIONS
在内容更改时使用 TransitionManager。默认情况下,这是一个交叉淡入淡出,这对某些应用程序来说非常糟糕。另一方面,FEATURE_ACTIVITY_TRANSITIONS
默认情况下不会对大多数应用程序执行任何操作。您必须选择以这种方式启动 activity,因此打开是安全的。
- Would it ever make sense to sense to disable
FEATURE_ACTIVITY_TRANSITIONS
and enable FEATURE_CONTENT_TRANSITIONS
?
Or does FEATURE_CONTENT_TRANSITIONS
require
FEATURE_ACTIVITY_TRANSITIONS
to be enabled as well?
是的,但不太可能。如果您的应用程序喜欢 FEATURE_CONTENT_TRANSITIONS
,它应该与 FEATURE_ACTIVITY_TRANSITIONS
一起工作。如果您想明确限制人们使用共享元素调用您的 activity 或者您不喜欢标准的输入过渡效果,您可以禁用它以防止其他应用程序调用您的应用程序时产生效果。
我在理解这两个 Window
标志之间的区别时遇到了一些麻烦,我不能 100% 确定何时需要使用每个标志以及为什么需要使用它们。
Window.FEATURE_ACTIVITY_TRANSITIONS
的文档说:
Enables Activities to run Activity Transitions either through sending or receiving ActivityOptions bundle created with
makeSceneTransitionAnimation(Activity, Pair[])
ormakeSceneTransitionAnimation(Activity, View, String)
.
Window.FEATURE_CONTENT_TRANSITIONS
的文档说:
Flag for requesting that window content changes should be animated using a
TransitionManager
.The
TransitionManager
is set usingsetTransitionManager(TransitionManager)
. If none is set, a defaultTransitionManager
will be used.
文档指出以下 Window
方法需要启用 FEATURE_ACTIVITY_TRANSITIONS
标志,但没有说明 FEATURE_CONTENT_TRANSITIONS
是否也需要启用(注意根据 源代码 ,FEATURE_ACTIVITY_TRANSITIONS
是 true
并且 FEATURE_CONTENT_TRANSITIONS
是 false
对于 material 主题的应用程序默认):
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 转换 API。然而,让我感到困惑的是,来自 Android 开发者网站的 this article 声明需要启用 FEATURE_CONTENT_TRANSITIONS
才能实现自定义 activity 转换。
所以这是我的问题:
- 这两个标志有什么区别? "activity transition" 和 "content transition" 在这种情况下有什么区别?
- 为什么默认启用
FEATURE_ACTIVITY_TRANSITIONS
而禁用FEATURE_CONTENT_TRANSITIONS
?什么时候真正需要启用FEATURE_CONTENT_TRANSITIONS
标志? - 禁用
FEATURE_ACTIVITY_TRANSITIONS
并启用FEATURE_CONTENT_TRANSITIONS
是否有意义?或者FEATURE_CONTENT_TRANSITIONS
是否也需要启用FEATURE_ACTIVITY_TRANSITIONS
?
谢谢!
我很高兴有机会回答这些问题,因为文档尚不清楚。
早期,有一个标志 FEATURE_CONTENT_TRANSITIONS
可以处理这两种功能。当 Material 应用程序在启用时出现意外行为时,我们将它们拆分。所以一些较旧的文档可能仍然说你必须启用 FEATURE_CONTENT_TRANSITIONS
才能获得 activity 转换,而它们意味着 FEATURE_ACTIVITY_TRANSITIONS
.
- What is the difference between these two flags? What is the difference between an "activity transition" and a "content transition" in this context?
在此上下文中的 activity 转换意味着您使用从 ActivityOptions.makeSceneTransitionAnimation
创建的包调用 startActivity
或者,您的 activity 是从该包开始的。 Activity 过渡会修改您的布局(例如淡入淡出元素、移动共享元素),因此如果您的 activity 不喜欢这样,您应该禁用 FEATURE_ACTIVITY_TRANSITIONS
.
当您调用 setContentView
时(第一次除外),内容转换使用 TransitionManager
。通常情况下,你会得到一个淡入淡出,但如果你的 Activity 的内容有共同点,例如共享 ID 或使用 transitionName
,你会得到 ChangeBounds
之间的行为那些意见。您可以使用 XML 或代码自定义与您的 Window 关联的 TransitionManager
来更改转换的详细信息。
- Why is
FEATURE_ACTIVITY_TRANSITIONS
enabled andFEATURE_CONTENT_TRANSITIONS
disabled by default? When is enabling theFEATURE_CONTENT_TRANSITIONS
flag actually required?
FEATURE_CONTENT_TRANSITIONS
在内容更改时使用 TransitionManager。默认情况下,这是一个交叉淡入淡出,这对某些应用程序来说非常糟糕。另一方面,FEATURE_ACTIVITY_TRANSITIONS
默认情况下不会对大多数应用程序执行任何操作。您必须选择以这种方式启动 activity,因此打开是安全的。
- Would it ever make sense to sense to disable
FEATURE_ACTIVITY_TRANSITIONS
and enableFEATURE_CONTENT_TRANSITIONS
? Or doesFEATURE_CONTENT_TRANSITIONS
requireFEATURE_ACTIVITY_TRANSITIONS
to be enabled as well?
是的,但不太可能。如果您的应用程序喜欢 FEATURE_CONTENT_TRANSITIONS
,它应该与 FEATURE_ACTIVITY_TRANSITIONS
一起工作。如果您想明确限制人们使用共享元素调用您的 activity 或者您不喜欢标准的输入过渡效果,您可以禁用它以防止其他应用程序调用您的应用程序时产生效果。