Avec la nouvelle bibliothèque de design, plusieurs nouvelles mises en page modifient considérablement le comportement de la barre d'outils si le développeur le souhaite. Étant donné que différents fragments ont des comportements et des objectifs différents, par exemple un fragment de galerie avec une barre d'outils de réduction montrant une photo importante, ou un fragment sans vue de défilement qui n'a tout simplement pas besoin de la disposition de la barre d'applications pour masquer la barre d'outils, avoir une seule barre d'outils dans l'activité peut s'avérer difficile.
Donc, avec cela, dois-je déplacer la barre d'outils vers chaque fragment? Si tel est le cas, je dois définir le supportActionBar chaque fois que je montre un fragment et avoir également une référence de l'activité dans le fragment qui annule le caractère indépendant des fragments. Si je laisse la barre d'outils dans l'activité seule, je dois avoir plusieurs mises en page définies pour chaque type de comportement dans chaque fragment. Quelle serait la meilleure approche?
la source
Réponses:
Quant à moi, cela semble trop étrange d'avoir une barre d'applications et une barre d'outils dans chaque fragment. J'ai donc choisi d'avoir une seule barre d'applications avec une barre d'outils en activité.
Pour résoudre ce problème avec CoordinatorLayout, vous devrez définir un comportement différent de votre
FrameLayout
(ou de toute autre mise en page) qui est censé contenir des fragments de chaque fragment que vous souhaitez remplacer le comportement par défaut.Supposons que votre comportement par défaut est
app:layout_behavior="@string/appbar_scrolling_view_behavior"
Ensuite, dans votre fragment_activity_layout.xml, vous pouvez avoir quelque chose comme ça:
Et dans chaque fragment que vous ne souhaitez pas implémenter,
app:layout_behavior="@string/appbar_scrolling_view_behavior"
vous devrez remplaceronAttach
et desonDetach
méthodes qui modifieront le comportement de votreFrameLayout
:Après cela, CoordinatorLayout ne réduira pas la barre d'applications, etc. et permettra aux mises en page de fragment d'être pleine hauteur.
la source
onLoadFinished
, il est possible que vous aime montrer une image centrée indiquant que rien n'est ici, comme dans l'application Inbox), mais je n'ai pas encore essayé cela. Peut-être plus tard aujourd'hui.enableCoordinator(Activity activity)
/ àdisableCoordinator(Activity activity)
partir de fragments.Voici ma solution
la source
C'est une très bonne question: faut-il
Toolbar
que s qui doivent agir comme unActionBar
être conservé dans unActivity
ou unFragment
? Après avoir recherché différentes questions et documentation, je n'ai pas trouvé de solution qui couvre tous les cas. Le chemin à parcourir dépend donc vraiment de votre situation.Cas 1: la barre d'outils doit remplacer ActionBar
Si la barre d'outils doit se comporter comme une ActionBar normale (ou si 1 fragment maximum est affiché de temps en temps), je pense que la meilleure / la plus simple est d'utiliser la traditionnelle
Activities
avec sa propre barre d'outils et d'y placer votre fragment. De cette façon, vous n'avez pas à vous soucier du moment où la barre d'outils doit être affichée.Changer l'ActionBar (-behaviour) de Fragments est également possible, mais je ne le recommanderais pas, car cela vous oblige à garder une trace de quel Fragment a changé l'ActionBar quand. Je ne sais même pas si la configuration de l'ActionBar peut être effectuée plusieurs fois.
Cas 2: chaque fragment doit avoir sa propre (partie de) barre d'outils
Vous pouvez également choisir de placer différentes barres d'outils autonomes dans différents fragments, avec leurs propres actions. De cette façon, vous pouvez afficher différents fragments les uns à côté des autres - chacun avec ses propres actions dans sa barre d'outils - et suggérer qu'il s'agit d'une barre d'outils (peut-être comme l'application Gmail, bien que je ne sois pas sûr). Cela signifie cependant que vous devrez gonfler ces barres d'outils vous-même, mais cela ne doit pas être très difficile.
J'espère que cela aidera à faire un choix.
(Désolé si j'ai fait des erreurs (de langue))
la source