web-dev-qa-db-fra.com

Où doit-on définir 'app: layout_behavior'?

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é:

  • ViewGroup sans enfants View Scrollable.

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 /

26
Evin1_

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 le AppBarLayout.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-être View) devrions-nous mettre cela app: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 un app:layout_behavior vers un RecyclerView ou tout autre View capable de défilement imbriqué tel que NestedScrollView. La bibliothèque de support contient une ressource chaîne spéciale @string/appbar_scrolling_view_behavior qui correspond à AppBarLayout.ScrollingViewBehavior, utilisé pour notifier le AppBarLayout 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.

22
ʍѳђઽ૯ท

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.

16
Ranjit

app:layout_behavior devrait être défini sur les vues qui sont directement enfants de la présentation de coordinateur

7
ishwor kafley