web-dev-qa-db-ja.com

NestedScrollViewのViewPager

折りたたみヘッダー(垂直スクロール)上に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は互いに好きではないようです。

Horizo​​ntalScrollViewを使用して回避策を試みました。機能しますが、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>
95
Kyso84

私はこの問題に出会い、私は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);

enter image description here

114
mio4kon

さて、ViewPagerNestedScrollViewを使って小さなデモを作成しました。私が直面した問題は、ViewPagerListViewの高さにありました。そこで、ListViewおよびViewPager'sの高さ測定に少し変更を加えました。

誰かがコードを調べたい場合、リンクは次のとおりです。 https://github.com/TheLittleNaruto/SupportDesignExample/

出力:

enter image description here

67
TheLittleNaruto

NestedScrollViewAndroid:fillViewport="true"を追加します。期間。

34
Sujit Yadav

同じ問題があった。

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>

19
ThemBones

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

enter image description here

18
Ino

このように試すことができます。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>
15
Paul

私は同じ問題を抱えていましたが、いくつかの変更を加えて修正しました。 ViewPagerは、NestedScrollView内では機能しません。 ViewPagerCoordinatorLayoutの直接の子として配置するだけです。次に、各ViewPagerのフラグメントのコンテンツをNestedScrollViewで囲む必要がありますそれだけです。

10
BST Kaal

視差効果を得るために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>
5
Pedro Henrique

NestedScrollViewをメインレイアウトから削除し、すべてのFragmentレイアウトにParentとして挿入しましたViewPagerでロードすることになっていたため、この問題は修正されました。

3
Riddhish Ojha

以下のカスタマイズされたクラスを使用して、問題を解決してください。 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();
        }
    }
}
3
Kuldeep Sakhiya

NestedScrollViewが下にあるアプリツールバーのレイアウトがあり、ネストされたツールバーの内側にLinearLayoutがあり、LinearLayoutの下にビューページャーがありました。 NestedScrollView内のLinearLayoutのアイデアは修正されました-ビューページャーのビュー間で左右にスライドできましたが、このコンテンツは移動しませんでしたhorizo​​ntally少なくとも。スクロールビューがネストされているため、すべてのコンテンツを垂直にスクロールできるはずです。それがアイデアでした。そのため、ネストされた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);
    }
}

ソリューションは この回答 に触発されました。私のために働いた!

3
Breeno

私は同様の問題を抱えていました(ただし、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つのレイアウトファイルでした。ここにコピーして貼り付け、単一のファイルのように構造化しようとしました。コピーアンドペースト中にエラーが発生した場合は申し訳ありませんが、その場合は修正できるようにお知らせください。

2
Cramps

以下は、表示ページャーの適切な高さを保証する必要があります。フラグメントは、ビューページャーによって提供される最初のフラグメントです。

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

同じ願いがあります。ViewPagerNestedScrollViewの中にネストします。しかし、それは私にとってもうまくいきません。私の場合、ViewPagerFragment内にあるため、ドロワーとの対話に応じてコンテンツを切り替えることができます。もちろん、AppBar、折りたたみなど、サポートライブラリのすべての新機能が動作する必要があります。

ユーザーがページャーでページを垂直にスクロールする場合、他のページも同じようにスクロールして、ページャー自体がスクロールしたという全体的な印象をユーザーに与えたいと思います。

私がやったのは、ViewPagerの中にNestedScrollViewを埋め込むのではなく、代わりにNestedScrollViewの中に含まれるフラグメントのコンテンツを埋め込むことです。

次に、1つのフラグメント内のスクロールの場合、コンテナに新しいスクロール位置を通知し、それが格納されます。

最後に、ページャーから検出された左または右のスワイプで(addOnPageChangeListenerを使用してドラッグ状態を探します)、ターゲットの左または右のフラグメントに、コンテナの知識に基づいてスクロールする必要がある場所を通知します。

1

私は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();
0
rz0

何時間もかけて上記のすべての提案を試した後、ようやく機能しました。重要な点は、NestedScrollViewPageViewer内に配置すること、および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>
0
Tranquiliser

実際、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の子階層の非常に深いところにあるという事実と、動作するまでスクロール動作が私を驚かせました。

0
Alex Mensak

xmlでNestedScrollViewを削除し、クラスにこのコードを追加しました

yourGridView.setNestedScrollingEnabled(true);

0

この行をNestedScrollViewに入れるだけです

Android:fillViewport="true"
0
gholam