Подтвердить что ты не робот

FEATURE_ACTIVITY_TRANSITIONS против FEATURE_CONTENT_TRANSITIONS

У меня возникли проблемы с пониманием разницы между этими двумя флагами Window и я не уверен на 100%, когда каждый из них нужно использовать и почему.

Документы для Window.FEATURE_ACTIVITY_TRANSITIONS говорят:

Включает действия для запуска 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. Что меня смущает, так это то, что эта статья с сайта разработчиков 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 также был включен?

Спасибо!

4b9b3361

Ответ 1

Я рад, что у меня есть возможность ответить на эти вопросы, поскольку документация менее ясна.

Раньше был один флаг FEATURE_CONTENT_TRANSITIONS, который обрабатывал обе функции. Мы разделили их, когда приложения Material получили неожиданное поведение, когда оно было включено. Поэтому некоторые старые документы могут по-прежнему утверждать, что вы должны включить FEATURE_CONTENT_TRANSITIONS для получения переходов активности, когда они означают FEATURE_ACTIVITY_TRANSITIONS.

  • В чем разница между этими двумя флагами? Что это  разница между "переходом активности" и "содержанием"  переход "в этом контексте?

Переход активности в этом контексте означает, что вы вызываете startActivity с помощью пакета, созданного из ActivityOptions.makeSceneTransitionAnimation, или ваша деятельность была запущена с этим пакетом. Переходы активности изменяют ваш макет (например, затухание в элементах, перемещение общих элементов), поэтому, если ваша активность не нравится, вы должны отключить FEATURE_ACTIVITY_TRANSITIONS.

Переходы содержимого используют TransitionManager, когда вы вызываете setContentView (кроме первого раза). Как правило, вы получите перекрестное затухание, но если ваш контент Activity имеет общие черты, такие как совместное использование идентификаторов или использование transitionName, вы получите поведение ChangeBounds между этими представлениями. Вы можете изменить детали своих переходов, настроив TransitionManager, связанные с вашим окном, либо с помощью XML или кода.

  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. Если вы хотите явно запретить людям вызывать свою активность с помощью общих элементов или вам не нравится, как стандартный эффект перехода введите, вы можете отключить его, чтобы предотвратить эффект, когда другие приложения звонят вам.