When using the CoordinatorLayout my ScrollView has an incorrect size

32,928

Solution 1

The standard ScrollView is only meant to be used as a parent. You need to change the ScrollView to a android.support.v4.widget.NestedScrollView.

An example can be seen in the reference documentation for AppBarLayout.

Solution 2

NestedScrollView is just like ScrollView, but it supports acting as both a nested scrolling parent and child on both new and old versions of Android. Nested scrolling is enabled by default.

You can use a NestedScrollView within a parent ScrollView. NestedScrollView is used when there is a need for a scrolling view inside another scrolling view. This is where it is useful, when the system needs to decide which view to scroll.

Here is an example of NestedScrollView with 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>
Share:
32,928
beetstra
Author by

beetstra

Updated on July 25, 2022

Comments

  • beetstra
    beetstra almost 2 years

    I'm using a ScrollView in a layout, and am attempting to use the new CoordinatorLayout from the design support library.

    My layout file looks like this:

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

    When testing this the scrollview only occupies part of the screen. What went wrong?