web-dev-qa-db-fra.com

FEATURE_ACTIVITY_TRANSITIONS contre FEATURE_CONTENT_TRANSITIONS

J'ai du mal à comprendre la différence entre ces deux indicateurs Window et je ne suis pas certain à 100% quand chacun doit être utilisé et pourquoi.

Les documents pour Window.FEATURE_ACTIVITY_TRANSITIONS disent:

Permet à Activities d'exécuter des transitions d'activité via l'envoi ou la réception d'un ensemble ActivityOptions créé avec makeSceneTransitionAnimation(Activity, Pair[]) ou makeSceneTransitionAnimation(Activity, View, String).

Et les documents pour Window.FEATURE_CONTENT_TRANSITIONS disent:

Indicateur pour demander que les modifications du contenu de la fenêtre soient animées à l'aide d'un TransitionManager.

TransitionManager est défini à l'aide de setTransitionManager(TransitionManager). Si aucun n'est défini, un TransitionManager par défaut sera utilisé.

La documentation indique que les méthodes Window suivantes nécessitent l'activation du drapeau FEATURE_ACTIVITY_TRANSITIONS, Mais ne disent pas si le FEATURE_CONTENT_TRANSITIONS Doit être activé ou non. également activé (notez que selon le code source , FEATURE_ACTIVITY_TRANSITIONS est true et FEATURE_CONTENT_TRANSITIONS est false pour le thème matériel applications par défaut):

  • 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()

En d'autres termes, il semble que sur la base de ces informations FEATURE_ACTIVITY_TRANSITIONS Est l'indicateur de fonctionnalité que les applications devront activer pour utiliser les nouvelles API de transition d'activité de Lollipop. Ce qui m'embrouille cependant, c'est que cet article du site Android Developers site indique que l'activation de FEATURE_CONTENT_TRANSITIONS Est nécessaire pour implémenter des transitions d'activité personnalisées .

Donc, voici mes questions:

  1. Quelle est la différence entre ces deux drapeaux? Quelle est la différence entre une "transition d'activité" et une "transition de contenu" dans ce contexte?
  2. Pourquoi FEATURE_ACTIVITY_TRANSITIONS Est activé et FEATURE_CONTENT_TRANSITIONS Désactivé par défaut? Quand l'activation de l'indicateur FEATURE_CONTENT_TRANSITIONS Est-elle réellement requise?
  3. Serait-il jamais sensé de désactiver FEATURE_ACTIVITY_TRANSITIONS Et d'activer FEATURE_CONTENT_TRANSITIONS? Ou FEATURE_CONTENT_TRANSITIONS Nécessite-t-il que FEATURE_ACTIVITY_TRANSITIONS Soit également activé?

Merci!

44
Alex Lockwood

Je suis heureux d'avoir l'occasion de répondre à ces questions car la documentation n'est pas claire.

Au début, il y avait un drapeau FEATURE_CONTENT_TRANSITIONS qui a géré les deux fonctionnalités. Nous les avons séparés lorsque les applications Material ont eu un comportement inattendu lors de son activation. Ainsi, une documentation plus ancienne peut toujours dire que vous devez activer FEATURE_CONTENT_TRANSITIONS pour obtenir des transitions d'activité quand elles signifient FEATURE_ACTIVITY_TRANSITIONS.

  1. Quelle est la différence entre ces deux drapeaux? Quelle est la différence entre une "transition d'activité" et une "transition de contenu" dans ce contexte?

Une transition d'activité dans ce contexte signifie que vous appelez startActivity avec un bundle créé à partir de ActivityOptions.makeSceneTransitionAnimation ou, votre activité a démarré avec cet ensemble. Les transitions d'activité modifient votre mise en page (par exemple, fondu d'éléments, déplacement d'éléments partagés), donc si votre activité n'aime pas cela, vous devez désactiver FEATURE_ACTIVITY_TRANSITIONS.

Les transitions de contenu utilisent un TransitionManager lorsque vous appelez setContentView (autre que la première fois). En règle générale, vous obtiendrez un fondu enchaîné, mais si le contenu de votre activité a des choses en commun, telles que le partage d'ID ou l'utilisation de transitionName, vous obtiendrez un comportement de ChangeBounds entre ces vues. Vous pouvez modifier les détails de vos transitions en personnalisant le TransitionManager associé à votre fenêtre à l'aide de XML ou de code.

  1. Pourquoi est-ce FEATURE_ACTIVITY_TRANSITIONS activé et FEATURE_CONTENT_TRANSITIONS désactivé par défaut? Quand active le FEATURE_CONTENT_TRANSITIONS drapeau réellement requis?

FEATURE_CONTENT_TRANSITIONS utilise un TransitionManager lorsque votre contenu change. Par défaut, il s'agit d'un fondu enchaîné et c'était très mauvais pour certaines applications. D'autre part, FEATURE_ACTIVITY_TRANSITIONS ne fait rien par défaut pour la plupart des applications. Vous devez choisir de démarrer une activité de cette façon, il est donc sûr de l'activer.

  1. Serait-il un jour logique de désactiver FEATURE_ACTIVITY_TRANSITIONS et activer FEATURE_CONTENT_TRANSITIONS? Ou est-ce que FEATURE_CONTENT_TRANSITIONS nécessite FEATURE_ACTIVITY_TRANSITIONS à activer également?

Oui, mais c'est peu probable. Si votre application aime FEATURE_CONTENT_TRANSITIONS, cela devrait bien fonctionner avec FEATURE_ACTIVITY_TRANSITIONS. Si vous souhaitez empêcher explicitement les personnes d'appeler votre activité avec des éléments partagés ou si vous n'aimez pas l'effet de transition d'entrée standard, vous pouvez le désactiver pour empêcher l'effet lorsqu'une autre application appelle la vôtre.

46
George Mount