web-dev-qa-db-fra.com

Lors de l'utilisation de CoordinatorLayout, mon ScrollView a une taille incorrecte

J'utilise un ScrollView dans une mise en page et j'essaie d'utiliser le nouveau CoordinatorLayout de la bibliothèque de support de conception .

Mon fichier de mise en page ressemble à 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">

  <ScrollView
      Android:layout_width="match_parent"
      Android:layout_height="match_parent"
      app:layout_behavior="@string/appbar_scrolling_view_behavior">
    <LinearLayout
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        Android:orientation="vertical">
      ...
    </LinearLayout>
  </ScrollView>
  <Android.support.design.widget.AppBarLayout
      Android:layout_width="match_parent"
      Android:layout_height="wrap_content">
    <Android.support.v7.widget.Toolbar ... />
  </Android.support.design.widget.AppBarLayout>
</Android.support.design.widget.CoordinatorLayout>

Lors du test, le scrollview n'occupe qu'une partie de l'écran. Qu'est ce qui ne s'est pas bien passé?

42
beetstra

Le ScrollView standard est uniquement destiné à être utilisé comme parent. Vous devez remplacer ScrollView par Android.support.v4.widget.NestedScrollView .

Un exemple peut être vu dans la documentation de référence pour AppBarLayout .

120
beetstra

NestedScrollView est comme ScrollView, mais il prend en charge le rôle de parent et d'enfant de défilement imbriqué sur les nouvelles et anciennes versions d'Android. Le défilement imbriqué est activé par défaut.

Vous pouvez utiliser un NestedScrollView dans un ScrollView parent. NestedScrollView est utilisé lorsqu'il existe un besoin pour une vue de défilement dans une autre vue de défilement. C'est là que cela est utile, lorsque le système doit décider quelle vue faire défiler.

Voici un exemple de NestedScrollView avec CoordinatorLayout:

 <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>
3
live-love