FEATURE_ACTIVITY_TRANSITIONS против FEATURE_CONTENT_TRANSITIONS
У меня возникли проблемы с пониманием разницы между этими двумя Window
флаги и я не уверен на 100%, когда каждый из них должен использоваться и почему.
Документы для Window.FEATURE_ACTIVITY_TRANSITIONS
сказать:
Позволяет операциям запускать переходы действий посредством отправки или получения пакета ActivityOptions, созданного с помощью
makeSceneTransitionAnimation(Activity, Pair[])
или жеmakeSceneTransitionAnimation(Activity, View, String)
,
И документы для Window.FEATURE_CONTENT_TRANSITIONS
сказать:
Флаг для запроса изменения содержимого окна должен быть анимирован с использованием
TransitionManager
,
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
это флаг функции, который приложения должны будут включить для использования новых API-интерфейсов Lollipop Activity Transition. Однако меня смущает то, что в этой статье с сайта разработчиков Android говорится, что FEATURE_CONTENT_TRANSITIONS
требуется для реализации пользовательских переходов активности.
Итак, вот мои вопросы:
- В чем разница между этими двумя флагами? В чем разница между "переходом активности" и "переходом контента" в этом контексте?
- Почему
FEATURE_ACTIVITY_TRANSITIONS
включен иFEATURE_CONTENT_TRANSITIONS
по умолчанию отключен? Когда это позволяетFEATURE_CONTENT_TRANSITIONS
флаг на самом деле требуется? - Будет ли когда-нибудь смысл отключать
FEATURE_ACTIVITY_TRANSITIONS
и включитьFEATURE_CONTENT_TRANSITIONS
? Или делаетFEATURE_CONTENT_TRANSITIONS
требоватьFEATURE_ACTIVITY_TRANSITIONS
быть включенным также?
Спасибо!
1 ответ
Я рад, что у меня есть возможность ответить на эти вопросы, так как документация не совсем ясна.
Раньше был один флаг FEATURE_CONTENT_TRANSITIONS
это обрабатывало обе функции. Мы разделили их, когда приложения Материал получили неожиданное поведение, когда оно было включено. Таким образом, некоторые старые документы могут по-прежнему говорить, что вы должны включить FEATURE_CONTENT_TRANSITIONS
чтобы получить переходы активности, когда они имеют в виду FEATURE_ACTIVITY_TRANSITIONS
,
- В чем разница между этими двумя флагами? В чем разница между "переходом активности" и "переходом контента" в этом контексте?
Переход активности в этом контексте означает, что вы звоните startActivity
с расслоением, созданным из ActivityOptions.makeSceneTransitionAnimation
или ваша деятельность началась с этого пакета. Переходы активности изменяют ваш макет (например, затенение элементов, перемещение общих элементов), поэтому, если ваша активность не нравится, вы должны отключить FEATURE_ACTIVITY_TRANSITIONS
,
Контентные переходы используют TransitionManager
когда ты звонишь setContentView
(кроме первого раза). Как правило, вы получите перекрестное затухание, но если в контенте вашей деятельности есть общие черты, такие как обмен идентификаторами или использование transitionName
, ты получишь ChangeBounds
поведение между этими взглядами. Вы можете изменить детали ваших переходов, настроив TransitionManager
связан с вашим окном либо с использованием XML или кода.
- Почему
FEATURE_ACTIVITY_TRANSITIONS
включен иFEATURE_CONTENT_TRANSITIONS
по умолчанию отключен? Когда это позволяетFEATURE_CONTENT_TRANSITIONS
флаг на самом деле требуется?
FEATURE_CONTENT_TRANSITIONS
использует TransitionManager, когда ваш контент меняется. По умолчанию это кроссфейд, и это было очень плохо для некоторых приложений. С другой стороны, FEATURE_ACTIVITY_TRANSITIONS
по умолчанию ничего не делает для большинства приложений. Вы должны выбрать запуск действия таким образом, чтобы его было безопасно включить.
- Будет ли когда-нибудь смысл отключать
FEATURE_ACTIVITY_TRANSITIONS
и включитьFEATURE_CONTENT_TRANSITIONS
? Или делаетFEATURE_CONTENT_TRANSITIONS
требоватьFEATURE_ACTIVITY_TRANSITIONS
быть включенным также?
Да, но вряд ли. Если ваше приложение нравится FEATURE_CONTENT_TRANSITIONS
должно хорошо работать с FEATURE_ACTIVITY_TRANSITIONS
, Если вы хотите явно ограничить людей от вызова вашей деятельности с общими элементами или вам не нравится стандартный эффект ввода перехода, вы можете отключить его, чтобы предотвратить эффект, когда другие приложения вызывают ваши.