web-dev-qa-db-ja.com

CoordinatorLayoutを使用すると、ScrollViewのサイズが正しくありません

レイアウトでScrollViewを使用しており、 design support library の新しい 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">

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

これをテストするとき、スクロールビューは画面の一部のみを占有します。何が悪かったのか?

42
beetstra

標準のScrollViewは、親としてのみ使用するためのものです。 ScrollViewを Android.support.v4.widget.NestedScrollView に変更する必要があります。

AppBarLayout のリファレンスドキュメントで例を参照できます。

120
beetstra

NestedScrollViewはScrollViewに似ていますが、Androidの新しいバージョンと古いバージョンの両方で、ネストされたスクロールの親と子の両方として機能することをサポートしています。ネストされたスクロールはデフォルトで有効になっています。

親ScrollView内でNestedScrollViewを使用できます。 NestedScrollViewは、別のスクロールビュー内にスクロールビューが必要な場合に使用されます。これは、システムがスクロールするビューを決定する必要がある場合に役立ちます。

CoordinatorLayoutを使用したNestedScrollViewの例を次に示します。

 <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