折りたたみヘッダー(垂直スクロール)上にViewPager(水平スクロール)のようなものであるGoogleニューススタンドのようなインターフェイスを作成する必要があります。私の要件の1つは、Google IO 2015で発表された新しいデザインサポートライブラリを使用することです。( http://Android-developers.blogspot.ca/2015/05/Android-design- support-library.html )
Chris Banesによって作成されたサンプルに基づいて( https://github.com/chrisbanes/cheesesquare )基本的なLinearLayoutを使用して、折りたたみ動作を実行できるようになりました(水平スクロールなし)。
LinearLayoutをViewPagerに置き換えようとしましたが、空白の画面が表示されました。幅、重さ、あらゆる種類のビューグループで遊んでみましたが、まだ空白の画面です。 ViewPagerとNestedScrollViewは互いに好きではないようです。
HorizontalScrollViewを使用して回避策を試みました。機能しますが、PagerTitleStrip機能の利点と単一のパネルへのフォーカスを失います(2つのパネル間で水平に停止できます)。
誰かが私を解決策に導くことができるなら、今はもうアイデアはありません...
ありがとう
これが私の最新のレイアウトファイルです。
<?xml version="1.0" encoding="utf-8"?>
<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.design.widget.AppBarLayout
Android:layout_width="match_parent"
Android:layout_height="@dimen/header_height"
Android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
<Android.support.design.widget.CollapsingToolbarLayout
Android:layout_width="match_parent"
Android:layout_height="match_parent"
app:contentScrim="?attr/colorPrimary"
app:expandedTitleMarginEnd="64dp"
app:expandedTitleMarginStart="48dp"
app:layout_scrollFlags="scroll|exitUntilCollapsed">
<include
layout="@layout/part_header"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
app:layout_collapseMode="parallax"/>
<Android.support.v7.widget.Toolbar
Android:id="@+id/activity_main_toolbar"
Android:layout_width="match_parent"
Android:layout_height="?attr/actionBarSize"
app:layout_collapseMode="pin"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light"/>
</Android.support.design.widget.CollapsingToolbarLayout>
</Android.support.design.widget.AppBarLayout>
<Android.support.v4.widget.NestedScrollView
Android:id="@+id/activity_main_nestedscrollview"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:fillViewport="true"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
<Android.support.v4.view.ViewPager
Android:id="@+id/activity_main_viewpager"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:background="#FFA0"/>
</Android.support.v4.widget.NestedScrollView>
</Android.support.design.widget.CoordinatorLayout>
私はこの問題に出会い、私はsetFillViewport (true)
でそれを解決します
<Android.support.v4.widget.NestedScrollView
xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:app="http://schemas.Android.com/apk/res-auto"
xmlns:tools="http://schemas.Android.com/tools"
Android:layout_width="match_parent"
Android:id="@+id/nest_scrollview"
Android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:context="mio.kon.yyb.nestedscrollviewbug.ScrollingActivity"
tools:showIn="@layout/activity_scrolling">
<Android.support.v4.view.ViewPager
Android:id="@+id/viewpager"
Android:layout_width="match_parent"
Android:layout_height="match_parent"/>
活動中
NestedScrollView scrollView = (NestedScrollView) findViewById (R.id.nest_scrollview);
scrollView.setFillViewport (true);
さて、ViewPager
とNestedScrollView
を使って小さなデモを作成しました。私が直面した問題は、ViewPager
とListView
の高さにありました。そこで、ListView
およびViewPager's
の高さ測定に少し変更を加えました。
誰かがコードを調べたい場合、リンクは次のとおりです。 https://github.com/TheLittleNaruto/SupportDesignExample/
出力:
NestedScrollView
にAndroid:fillViewport="true"
を追加します。期間。
同じ問題があった。
NestedScrollView around ViewPagerを配置すると、機能しません。
DIDが機能するのは、NestedScrollView inside ViewPager内にロードするフラグメントのレイアウトを配置することです。
<Android.support.v4.widget.NestedScrollView xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:app="http://schemas.Android.com/apk/res-auto"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:id="@id/fragment_detail"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:layout_gravity="fill_vertical"
Android:orientation="vertical">
...Content...
</LinearLayout>
</Android.support.v4.widget.NestedScrollView>
</ code>
ViewPagerをNestedScrollView内に配置する代わりに、その逆を行います。
NestedScrollViewをViewPager内の子ビューに配置します。ViewPagerは本質的にFragmentのレイアウトです。また、フラグメントのリストレイアウトが非常に単純な場合は、NestedScrollViewを使用する必要さえありません。
レイアウト例
アクティビティのレイアウト:
<?xml version="1.0" encoding="utf-8"?>
<Android.support.design.widget.CoordinatorLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:app="http://schemas.Android.com/apk/res-auto"
xmlns:tools="http://schemas.Android.com/tools"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:fitsSystemWindows="true">
<Android.support.design.widget.AppBarLayout
Android:id="@+id/app_bar"
Android:layout_width="match_parent"
Android:layout_height="@dimen/app_bar_height"
Android:fitsSystemWindows="true"
Android:theme="@style/AppTheme.AppBarOverlay">
<Android.support.design.widget.CollapsingToolbarLayout
Android:id="@+id/toolbar_layout"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:fitsSystemWindows="true"
app:contentScrim="?attr/colorPrimary"
app:layout_scrollFlags="scroll|exitUntilCollapsed|snap">
<ImageView
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:minHeight="@dimen/app_bar_height"
Android:scaleType="centerCrop"
Android:src="@drawable/my_bg"
app:layout_collapseMode="parallax"
app:layout_collapseParallaxMultiplier="0.8"
app:layout_scrollFlags="scroll|enterAlways|enterAlwaysCollapsed" />
<Android.support.v7.widget.Toolbar
Android:id="@+id/toolbar"
Android:layout_width="match_parent"
Android:layout_height="?attr/actionBarSize"
app:layout_collapseMode="pin"
app:popupTheme="@style/AppTheme.PopupOverlay" />
</Android.support.design.widget.CollapsingToolbarLayout>
</Android.support.design.widget.AppBarLayout>
<LinearLayout
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:orientation="vertical"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
<Android.support.design.widget.TabLayout
Android:id="@+id/content_tabs"
Android:layout_width="match_parent"
Android:layout_height="wrap_content" />
<Android.support.v4.view.ViewPager
Android:id="@+id/viewPager"
Android:layout_width="match_parent"
Android:layout_height="0dp"
Android:layout_weight="1" />
</LinearLayout>
</Android.support.design.widget.CoordinatorLayout>
TabLayoutが不要な場合は、LinearLayoutを捨ててViewPagerをスタンドアロンにすることができます。ただし、ViewPager属性では必ずapp:layout_behavior="@string/appbar_scrolling_view_behavior"
を使用してください。
シンプルフラグメントのレイアウト:
<?xml version="1.0" encoding="utf-8"?>
<Android.support.v7.widget.RecyclerView xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:id="@+id/recycler_view"
Android:layout_width="match_parent"
Android:layout_height="match_parent" />
複雑なフラグメントのレイアウト:
<?xml version="1.0" encoding="utf-8"?>
<Android.support.v4.widget.NestedScrollView
xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:fillViewport="true"
Android:layout_width="match_parent"
Android:layout_height="match_parent">
<RelativeLayout
Android:layout_width="match_parent"
Android:layout_height="wrap_content">
<Android.support.v7.widget.RecyclerView
Android:id="@+id/recycler_view"
Android:layout_width="match_parent"
Android:layout_height="match_parent" />
<TextView
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:text="Hello World"/>
</RelativeLayout>
</Android.support.v4.widget.NestedScrollView>
サンプルアプリ: CollapsingToolbarPoc
このように試すことができます。viewpagerは正常に動作しますが、viewpagerの高さは固定されています。
私はまだより良い解決策を見つけています...ので、どの点でもそれを改善できることを教えてください、ありがとう
<Android.support.v4.widget.NestedScrollView
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:minHeight="800dp"
Android:orientation="vertical">
<Android.support.v4.view.ViewPager
Android:id="@+id/pager"
Android:layout_width="match_parent"
Android:layout_height="0dp"
Android:layout_weight="1"/>
</LinearLayout>
</Android.support.v4.widget.NestedScrollView>
私は同じ問題を抱えていましたが、いくつかの変更を加えて修正しました。 ViewPager
は、NestedScrollView
内では機能しません。 ViewPager
をCoordinatorLayout
の直接の子として配置するだけです。次に、各ViewPagerのフラグメントのコンテンツをNestedScrollView
で囲む必要がありますそれだけです。
視差効果を得るためにNestedScrollViewを使用する必要はありません。次のようなものを試してください:
<Android.support.design.widget.CoordinatorLayout
Android:layout_width="match_parent"
Android:layout_height="match_parent"
tools:context=".MainActivity">
<Android.support.design.widget.AppBarLayout
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:animateLayoutChanges="true">
<Android.support.v7.widget.Toolbar
Android:id="@+id/my_toolbar"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
app:layout_scrollFlags="scroll|enterAlways"/>
<Android.support.design.widget.TabLayout
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:id="@+id/my_tab_layout"
Android:fillViewport="false"
app:tabMode="fixed"/>
</Android.support.design.widget.AppBarLayout>
<Android.support.v4.view.ViewPager
Android:id="@+id/my_view_pager"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior"/>
</Android.support.design.widget.CoordinatorLayout>
NestedScrollViewをメインレイアウトから削除し、すべてのFragmentレイアウトにParentとして挿入しましたViewPagerでロードすることになっていたため、この問題は修正されました。
以下のカスタマイズされたクラスを使用して、問題を解決してください。 pagechangelistenerでonRefresh()メソッドを呼び出すことを忘れないでください。
public class ContentWrappingViewPager extends ViewPager
{
private int width = 0;
public ContentWrappingViewPager(Context context) {
super(context);
}
public ContentWrappingViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec)
{
int height = 0;
width = widthMeasureSpec;
if (getChildCount() > getCurrentItem()) {
View child = getChildAt(getCurrentItem());
child.measure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
int h = child.getMeasuredHeight();
if(h > height) height = h;
}
heightMeasureSpec = MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY);
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}
public void onRefresh()
{
try {
int height = 0;
if (getChildCount() > getCurrentItem()) {
View child = getChildAt(getCurrentItem());
child.measure(width, MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
int h = child.getMeasuredHeight();
if(h > height) height = h;
}
int heightMeasureSpec = MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY);
ViewGroup.LayoutParams layoutParams = this.getLayoutParams();
layoutParams.height = heightMeasureSpec;
this.setLayoutParams(layoutParams);
} catch (Exception e) {
e.printStackTrace();
}
}
}
NestedScrollViewが下にあるアプリツールバーのレイアウトがあり、ネストされたツールバーの内側にLinearLayoutがあり、LinearLayoutの下にビューページャーがありました。 NestedScrollView内のLinearLayoutのアイデアは修正されました-ビューページャーのビュー間で左右にスライドできましたが、このコンテンツは移動しませんでしたhorizontally少なくとも。スクロールビューがネストされているため、すべてのコンテンツを垂直にスクロールできるはずです。それがアイデアでした。そのため、ネストされたNestedScrollViewの高さをmatch_parentに設定し、ビューポートを埋めてから、すべての子レイアウト/ ViewPagerをwrap_contentに設定します。
私の頭の中で正しかった。しかし、それは機能しませんでした-ViewPagerを使用すると、viewpagerページのコンテンツが現在の画面の下部より下にプッシュされたかどうかにかかわらず、左右に移動できましたが、垂直スクロールはできませんでした。基本的には、ViewPagerはさまざまなページでwrap_contentを尊重しないためです。
ViewPagerをサブクラス化して、現在選択されているアイテムに応じて高さを変更し、layout_height = "wrap_content"のように振る舞わせることでこれを回避しました。
public class ContentWrappingViewPager extends ViewPager {
public ContentWrappingViewPager(Context context) {
super(context);
}
public ContentWrappingViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int height = 0;
if (getChildCount() > getCurrentItem()) {
View child = getChildAt(getCurrentItem());
child.measure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
int h = child.getMeasuredHeight();
if(h > height) height = h;
}
heightMeasureSpec = MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY);
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}
}
ソリューションは この回答 に触発されました。私のために働いた!
私は同様の問題を抱えていました(ただし、CollapsingToolbarLayout
なしで、Toolbar
内の単純なTabLayout
+ AppBarLayout
のみ)。 ViewPager
内のNestedScrollView
の内容をスクロールダウンするときに、ツールバーを見えないところにスクロールさせたいと思いました。
私のレイアウトは次のようになりました:
<Android.support.design.widget.CoordinatorLayout
Android:layout_width="match_parent"
Android:layout_height="match_parent"
tools:context=".MainActivity">
<Android.support.design.widget.AppBarLayout
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:animateLayoutChanges="true">
<Android.support.v7.widget.Toolbar
Android:id="@+id/my_toolbar"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
app:layout_scrollFlags="scroll|enterAlways"/>
<Android.support.design.widget.TabLayout
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:id="@+id/my_tab_layout"
Android:fillViewport="false"
app:tabMode="fixed"/>
</Android.support.design.widget.AppBarLayout>
<Android.support.v4.widget.NestedScrollView
Android:id="@+id/container"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:fillViewport="true"
Android:layout_gravity="fill_vertical"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
<Android.support.v4.view.ViewPager
Android:id="@+id/my_view_pager"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
</Android.support.v4.view.ViewPager>
</Android.support.v4.widget.NestedScrollView>
</Android.support.design.widget.CoordinatorLayout>
このレイアウトは意図したとおりには機能しませんでしたが、単にNestedScrollView
を削除し、代わりにLinearLayout
を使用することで解決しました。 Android Support Library v23.1.0ですぐに機能しました。レイアウトは次のようになりました。
<Android.support.design.widget.CoordinatorLayout
Android:layout_width="match_parent"
Android:layout_height="match_parent"
tools:context=".MainActivity">
<Android.support.design.widget.AppBarLayout
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:animateLayoutChanges="true">
<Android.support.v7.widget.Toolbar
Android:id="@+id/my_toolbar"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
app:layout_scrollFlags="scroll|enterAlways"/>
<Android.support.design.widget.TabLayout
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:id="@+id/my_tab_layout"
Android:fillViewport="false"
app:tabMode="fixed"/>
</Android.support.design.widget.AppBarLayout>
<LinearLayout
Android:orientation="vertical"
Android:id="@+id/container"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:layout_marginBottom="4dp"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
<Android.support.v4.view.ViewPager
Android:id="@+id/my_view_pager"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
</Android.support.v4.view.ViewPager>
</LinearLayout>
</Android.support.design.widget.CoordinatorLayout>
PS:これらは実際には私のプロジェクトの2つのレイアウトファイルでした。ここにコピーして貼り付け、単一のファイルのように構造化しようとしました。コピーアンドペースト中にエラーが発生した場合は申し訳ありませんが、その場合は修正できるようにお知らせください。
以下は、表示ページャーの適切な高さを保証する必要があります。フラグメントは、ビューページャーによって提供される最初のフラグメントです。
<Android.support.v4.widget.NestedScrollView
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="match_parent"
Android:orientation="horizontal">
<Android.support.v4.view.ViewPager
Android:id="@+id/viewPager"
Android:layout_width="match_parent"
Android:layout_height="match_parent"/>
<fragment
class="com.mydomain.MyViewPagerFragment"
Android:id="@+id/myFragment"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:visibility="gone"/>
</LinearLayout>
</Android.support.v4.widget.NestedScrollView>
同じ願いがあります。ViewPager
をNestedScrollView
の中にネストします。しかし、それは私にとってもうまくいきません。私の場合、ViewPager
はFragment
内にあるため、ドロワーとの対話に応じてコンテンツを切り替えることができます。もちろん、AppBar、折りたたみなど、サポートライブラリのすべての新機能が動作する必要があります。
ユーザーがページャーでページを垂直にスクロールする場合、他のページも同じようにスクロールして、ページャー自体がスクロールしたという全体的な印象をユーザーに与えたいと思います。
私がやったのは、ViewPager
の中にNestedScrollView
を埋め込むのではなく、代わりにNestedScrollView
の中に含まれるフラグメントのコンテンツを埋め込むことです。
次に、1つのフラグメント内のスクロールの場合、コンテナに新しいスクロール位置を通知し、それが格納されます。
最後に、ページャーから検出された左または右のスワイプで(addOnPageChangeListener
を使用してドラッグ状態を探します)、ターゲットの左または右のフラグメントに、コンテナの知識に基づいてスクロールする必要がある場所を通知します。
私は1つの実用的なソリューションを知っています。CoordinatorLayoutでActivityを使用し、コンテナでFrameLayoutを使用します。それから。フラグメントマネージャを使用して、コンテナにフラグメントを配置します。たとえば、私のコード:
<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:orientation="vertical">
<Android.support.design.widget.AppBarLayout
Android:id="@+id/appbar"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
app:elevation="0dp">
<Android.support.v7.widget.Toolbar
Android:id="@+id/toolbar"
Android:layout_width="match_parent"
app:layout_scrollFlags="scroll|enterAlways"
Android:layout_height="@dimen/toolbar_height"
Android:background="?attr/colorPrimary"
Android:gravity="center">
</Android.support.v7.widget.Toolbar>
</Android.support.design.widget.AppBarLayout>
<FrameLayout
Android:id="@+id/container"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:orientation="vertical"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
</FrameLayout>
フラグメント:
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:app="http://schemas.Android.com/apk/res-auto"
xmlns:tools="http://schemas.Android.com/tools"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:orientation="vertical"
tools:context="com.improvemdia.inmyroom.MainFragment">
<Android.support.v4.view.ViewPager
Android:id="@+id/pager"
Android:layout_width="match_parent"
Android:layout_height="match_parent" />
次に、FragmentManagerを使用します
getSupportFragmentManager().beginTransaction()
.replace(R.id.container, new MainFragment())
.commit();
何時間もかけて上記のすべての提案を試した後、ようやく機能しました。重要な点は、NestedScrollView
をPageViewer
内に配置すること、およびBOTHビューに対してlayout_behavior
を'@string/appbar_scrolling_view_behavior'
に設定することです。最終的なレイアウトは
<CoordinatorLayout>
<ViewPager app:layout_behavior="@string/appbar_scrolling_view_behavior">
<NestedScrollView fillViewport="true" app:layout_behavior="@string/appbar_scrolling_view_behavior">
<Content>...</Content>
</NestedScrollView>
</ViewPager>
<AppBarLayout>...</AppBarLayout>
</CoordinatorLayout>
実際、NestedScrollViewはCoordinatorLayoutのCollapsingToolbarLayoutの直接の兄弟である必要はありません。私は本当に奇妙な何かを達成しました。 appbar_scrolling_view_behaviorは、2つのネストされたフラグメントで機能します。
私のアクティビティレイアウト:
<Android.support.design.widget.CoordinatorLayout>
<Android.support.design.widget.AppBarLayout>
<Android.support.design.widget.CollapsingToolbarLayout>
<include
layout="@layout/toolbar"/>
</Android.support.design.widget.CollapsingToolbarLayout>
</Android.support.design.widget.AppBarLayout>
<FrameLayout
Android:id="@+id/container"
app:layout_behavior="@string/appbar_scrolling_view_behavior"/>
</Android.support.design.widget.CoordinatorLayout>
「コンテナ」frameLayoutで、このフラグメントを拡大しました。
<Android.support.constraint.ConstraintLayout>
... some content ...
<Android.support.v4.view.ViewPager/>
...
</Android.support.constraint.ConstraintLayout>
そして、そのViewPager内のフラグメントは次のようになります。
<RelativeLayout>
<Android.support.v7.widget.RecyclerView/>
....
</RelativeLayout>
NestedScrollViewがCoordinatorLayoutの子階層の非常に深いところにあるという事実と、動作するまでスクロール動作が私を驚かせました。
xmlでNestedScrollViewを削除し、クラスにこのコードを追加しました
yourGridView.setNestedScrollingEnabled(true);
この行をNestedScrollViewに入れるだけです
Android:fillViewport="true"