it-swarm.com.de

Bei Verwendung des CoordinatorLayouts hat meine ScrollView eine falsche Größe

Ich verwende eine ScrollView in einem Layout und versuche, das neue CoordinatorLayout aus der Design Support Library zu verwenden.

Meine Layoutdatei sieht folgendermaßen aus:

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

Beim Testen belegt die Bildlaufansicht nur einen Teil des Bildschirms. Was schief gelaufen ist?

42
beetstra

Die Standard-ScrollView ist nur zur Verwendung als übergeordnetes Element vorgesehen. Sie müssen die ScrollView in ein Android.support.v4.widget.NestedScrollView ändern.

Ein Beispiel finden Sie in der Referenzdokumentation für AppBarLayout .

120
beetstra

NestedScrollView ist genau wie ScrollView, unterstützt jedoch das Funktionieren als verschachteltes übergeordnetes und untergeordnetes Bildlaufelement auf neuen und alten Android-Versionen. Das verschachtelte Scrollen ist standardmäßig aktiviert.

Sie können eine NestedScrollView in einer übergeordneten ScrollView verwenden. NestedScrollView wird verwendet, wenn eine Bildlaufansicht in einer anderen Bildlaufansicht erforderlich ist. Dies ist hilfreich, wenn das System entscheiden muss, welche Ansicht gescrollt werden soll.

Hier ist ein Beispiel für NestedScrollView mit 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