it-swarm.com.ru

ViewPager в NestedScrollView

Мне нужно создать интерфейс, такой как Google Newsstand, который является своего рода ViewPager (горизонтальная прокрутка) поверх сворачивающегося заголовка (вертикальная прокрутка). Одним из моих требований является использование новой библиотеки поддержки дизайна, представленной в Google IO 2015 . ( http://Android-developers.blogspot.ca/2015/05/Android-design-support -library.html )

Основываясь на образце, созданном Крисом Бейнсом ( 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>
90
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

105
mio4kon

Хорошо, я сделал небольшую демонстрацию с ViewPager и NestedScrollView. Проблема, с которой я столкнулся, была связана с высотой ViewPager и ListView. Поэтому я немного изменил измерения высоты ListView и ViewPager's

Если кто-то захочет посмотреть код, вот ссылка: https://github.com/TheLittleNaruto/SupportDesignExample/

Результат:

 enter image description here

66
TheLittleNaruto

Добавьте Android:fillViewport="true" в свой NestedScrollView. период.

34
Sujit Yadav

Были те же проблемы.

При размещении NestedScrollView вокруг 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>

</ PRE> </ код>

19
ThemBones

Вместо того, чтобы помещать ViewPager в NestedScrollView, делайте это наоборот.

Поместите NestedScrollView в дочерние виды внутри ViewPager, который по сути является макетом фрагмента. Также очень вероятно, что вам даже не понадобится использовать 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 автономным. Но обязательно используйте app:layout_behavior="@string/appbar_scrolling_view_behavior" в атрибутах ViewPager.

Макет простого фрагмента:

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

17
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>
13
Paul

У меня была такая же проблема, и я просто исправил ее с некоторыми изменениями. ViewPager не работает внутри NestedScrollView. Проще говоря, ваш ViewPager является прямым потомком вашего CoordinatorLayout. Затем содержимое для каждого фрагмента 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 из основного макета и вставил в виде Parent во все мои Fragment макеты, которые должны были загружаться в ViewPager исправил эту проблему для меня. 

3
Riddhish Ojha

Используйте ниже настроенный класс, чтобы решить вашу проблему. Не забудьте вызвать метод onRefresh () на pagechangelistener.

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

У меня была похожая проблема (но без 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
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

У меня такое же желание, вложите ViewPager в NestedScrollView. Но это не работает и для меня. В моем случае ViewPager находится внутри Fragment, поэтому я могу переключать содержимое в зависимости от взаимодействия с ящиком. Конечно, AppBar, развал и т.д. И все новые функции библиотеки поддержки должны работать.

Если пользователь прокручивает страницу в пейджере по вертикали, я хочу, чтобы другие страницы прокручивались так же, чтобы у пользователя было общее впечатление, что сам пейджер прокручивается. 

Что я сделал, и это работает, так это то, что я больше не встраиваю ViewPager в NestedScrollView, вместо этого я встраиваю содержимое содержащихся фрагментов в NestedScrollView

Затем, в случае прокрутки в одном фрагменте, я информирую контейнер о новой позиции прокрутки, в которой она хранится. 

Наконец, проводя пальцем влево или вправо, обнаруженный на пейджере (используя addOnPageChangeListener для поиска состояний перетаскивания), я сообщаю целевому левому или правому фрагменту, куда он должен прокручиваться (основываясь на знании контейнера), чтобы быть выровненным по фрагменту, из которого я пришел ,.

1
François Perret

У меня был макет с панелью инструментов приложения с NestedScrollView под ним, затем внутри вложенной панели инструментов был LinearLayout, ниже LinearLayout был пейджер представления. Идея заключалась в том, что LinearLayout внутри NestedScrollView был исправлен - вы могли перемещаться влево/вправо между представлениями пейджера представления, но это содержимое не двигалось бы, по крайней мере 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);
    }
}

Решение было вдохновлено этот ответ . Работал на меня!

1
Breeno

Я знаю одно рабочее решение: вы используете Activity с CoordinatorLayout и используете 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

Проведя часы, попробовав все предложенные выше предложения, я наконец-то заставил его работать. Ключ помещает NestedScrollView внутри PageViewer, и устанавливает 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 не обязательно должен быть прямым братом CollapsingToolbarLayout в CoordinatorLayout. Я достиг чего-то действительно странного. 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

вы только что удалили NestedScrollView в своем xml и добавили этот код в свой класс

yourGridView.setNestedScrollingEnabled(true);

0
Rivaldy Firmansyah