Devrait-il être défini sur le parent de la fratrie AppBarLayout ou sur la première vue défilable à l'intérieur de la fratrie?
Avec Material Design for Android , il y a Views qui permet de travailler avec le comportement de la mise en page en fonction de son environnement. L'un d'entre eux est le CoordinatorLayout =, comme ce guide CodePath mentionne:
CoordinatorLayout étend la possibilité de réaliser de nombreux effets de défilement de Google Material Design. À l’heure actuelle, cette structure propose plusieurs méthodes qui lui permettent de fonctionner sans avoir à écrire votre propre code d’animation personnalisé.
Celui qui m'intéresse maintenant est:
- Agrandissement ou réduction de l'espace de la barre d'outils ou de l'en-tête afin de libérer de l'espace pour le contenu principal.
Donc, nous utiliserions le AppBarLayout avec un Toolbar avec app:layout_scrollFlags
set et un autre ViewGroup apparenté au AppBarLayout avec app:layout_behavior
.
Ma question est la suivante: dans quel groupe exact de View (ou peut-être View) devrions-nous mettre cela app:layout_behavior
?
Jusqu'à présent, j'ai essayé avec (et ils ont tous travaillé , et ils sont tous frères dans AppBarLayout):
Vue défilante
Premier groupe de vues dans une vue à défilement
ScrollView à l'intérieur d'un ViewGroup
Et celui-ci n'a pas fonctionné:
Il existe de nombreux exemples en ligne, mais aucun d’entre eux n’indique vraiment où vous devez le mettre, par exemple:
http://www.ingloriousmind.com/blog/quick-look-on-the-coordinatorlayout/https://guides.codepath.com/Android/Handling-Scrolls-with -CoordinatorLayouthttps://developer.Android.com/training/basics/firstapp/building-ui.htmlhttps://www.bignerdranch.com/blog/becoming -material-with-Android-design-support-library /
Vérifiez ce lien: https://developer.Android.com/reference/Android/support/design/widget/AppBarLayout.html
AppBarLayout
nécessite également un frère séparé pour savoir quand défiler. La liaison se fait à travers leAppBarLayout.ScrollingViewBehavior
class, ce qui signifie que vous devez définir le comportement de votre vue défilante comme une instance deAppBarLayout.ScrollingViewBehavior
. Une ressource de chaîne contenant le nom complet de la classe est disponible.
Ils en ont parlé, ce devrait être le View
qui sera affiché sous le AppBarLayout
comme ceci:
<Android.support.design.widget.CoordinatorLayout
xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:app="http://schemas.Android.com/apk/res-auto"
Android:layout_width="match_parent"
Android:layout_height="match_parent">
<Android.support.v4.widget.NestedScrollView
Android:layout_width="match_parent"
Android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
<!-- Your scrolling content -->
</Android.support.v4.widget.NestedScrollView>
<Android.support.design.widget.AppBarLayout
Android:layout_height="wrap_content"
Android:layout_width="match_parent">
<Android.support.v7.widget.Toolbar
...
app:layout_scrollFlags="scroll|enterAlways"/>
<Android.support.design.widget.TabLayout
...
app:layout_scrollFlags="scroll|enterAlways"/>
</Android.support.design.widget.AppBarLayout>
</Android.support.design.widget.CoordinatorLayout>
Ma question est la suivante: en quoi exactement
ViewGroup
(ou peut-êtreView
) devrions-nous mettre celaapp:layout_behavior
?
Et dans ce lien: http://guides.codepath.com/Android/Handling-Scrolls-with-CoordinatorLayout
Ensuite, nous devons définir une association entre le
AppBarLayout
et la vue qui fera défiler . Ajouter unapp:layout_behavior
vers unRecyclerView
ou tout autre View capable de défilement imbriqué tel queNestedScrollView
. La bibliothèque de support contient une ressource chaîne spéciale@string/appbar_scrolling_view_behavior
qui correspond àAppBarLayout.ScrollingViewBehavior
, utilisé pour notifier leAppBarLayout
lorsque des événements de défilement se produisent sur cette vue particulière. Le comportement doit être établi sur la vue qui déclenche l'événement.
Assurez-vous que vous avez ajouté le champ appbar_scrolling_view_behavior dans votre String.xml
<!-- The class name to the ScrollingChildBehavior required for AppBarLayout -->
<string name="appbar_scrolling_view_behavior" translatable="false">Android.support.design.widget.AppBarLayout$ScrollingViewBehavior</string>
Et comme tout le monde le sait, nous pouvons simplement utiliser ceci comme ci-dessous
<Android.support.v7.widget.RecyclerView
Android:id="@+id/rvSomeList"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior" />
C'est juste pour info pas réponse OP.
app:layout_behavior
devrait être défini sur les vues qui sont directement enfants de la présentation de coordinateur