Как использовать ViewPager2 с макетом CollapsibleToolbar

Я пытаюсь чего-то добиться с макетом collapsible toolbar, и у меня есть 2 вкладки с viewPager2

Ниже приведены два изображения, например, для случая расширенный снимок экрана и свернутый скриншот.

Ниже приведен код, который у меня есть в XML, и я не уверен, где он идет не так... в этом случае моя прокрутка не работает должным образом. Я хочу, чтобы панель инструментов оставалась сверху, когда она свернута

Я пытался добавить toolbar внутрь AppbarLayout, но это не сработало.

Также пробовал ниже ссылки у меня почему-то не работает Ссылка1Ссылка2

<?xml version = "1.0" encoding = "utf-8"?>
<layout xmlns:android = "http://schemas.android.com/apk/res/android"
    xmlns:app = "http://schemas.android.com/apk/res-auto">

    <androidx.coordinatorlayout.widget.CoordinatorLayout
        android:layout_width = "match_parent"
        android:layout_height = "match_parent"
        android:background = "@color/white_dark_blue">

        <com.google.android.material.appbar.AppBarLayout
            android:id = "@+id/app_bar_layout"
            android:layout_width = "match_parent"
            android:layout_height = "wrap_content"
            android:background = "@color/white_cream_darkest_blue"
            android:theme = "@style/ThemeOverlay.AppCompat.Dark.ActionBar"
            android:windowSoftInputMode = "adjustResize">

            <com.google.android.material.appbar.CollapsingToolbarLayout
                android:id = "@+id/collapsing_toolbar_layout"
                android:layout_width = "match_parent"
                android:layout_height = "match_parent"
                android:background = "@color/white_cream_darkest_blue"
                app:collapsedTitleTextAppearance = "@color/text_color"
                app:contentScrim = "@color/white_cream_darkest_blue"
                app:expandedTitleTextAppearance = "@color/text_color"
                app:layout_scrollFlags = "scroll|exitUntilCollapsed"
                app:statusBarScrim = "@color/white_cream_darkest_blue">

                <LinearLayout
                    android:layout_width = "match_parent"
                    android:layout_height = "wrap_content"
                    android:layout_marginStart = "@dimen/margin_start"
                    android:layout_marginTop = "40dp"
                    android:layout_marginEnd = "@dimen/margin_end"
                    android:orientation = "vertical">

                    <TextView
                        android:id = "@+id/textViewTitle"
                        style = "@style/screen_title"
                        android:layout_width = "match_parent"
                        android:layout_height = "match_parent"
                        android:layout_marginTop = "30dp"
                        android:text = "Mailing\nAddress"
                        android:textColor = "@color/text_color" />

                    <TextView

                        android:id = "@+id/textViewSubTitle"
                        android:layout_width = "match_parent"
                        android:layout_height = "match_parent"
                        android:layout_marginTop = "10dp"
                        android:fontFamily = "@font/roboto_light"
                        android:text = "We'll send your bill to this address."
                        android:textAlignment = "center"
                        android:textColor = "@color/text_color"
                        android:textSize = "20sp"
                        android:visibility = "gone" />

                    <View
                        android:layout_width = "match_parent"
                        android:layout_height = "30dp" />
                </LinearLayout>

                <androidx.appcompat.widget.Toolbar
                    android:id = "@+id/toolbar"
                    android:layout_width = "match_parent"
                    android:layout_height = "80dp"
                    android:layout_marginStart = "@dimen/margin_start"
                    android:layout_marginEnd = "@dimen/margin_end"
                    android:windowSoftInputMode = "adjustResize"
                    app:contentInsetStartWithNavigation = "0dp"
                    app:layout_collapseMode = "pin"
                    app:popupTheme = "@style/text_service"
                    app:title = "">

                    <TextView
                        android:id = "@+id/menuOption"
                        style = "@style/screen_sub_title"
                        android:layout_width = "match_parent"
                        android:layout_height = "wrap_content"
                        android:fontFamily = "@font/roboto_medium"
                        android:text = "Mailing Address"
                        android:textColor = "@color/text_color"
                        android:textSize = "20sp"
                        android:visibility = "gone" />


                </androidx.appcompat.widget.Toolbar>

            </com.google.android.material.appbar.CollapsingToolbarLayout>

        </com.google.android.material.appbar.AppBarLayout>

        <androidx.core.widget.NestedScrollView
            android:layout_width = "match_parent"
            android:layout_height = "match_parent"
            android:fillViewport = "true"
            android:clipToPadding = "false"
            android:scrollbars = "vertical"
            app:layout_behavior = "@string/appbar_scrolling_view_behavior">

            <androidx.constraintlayout.widget.ConstraintLayout
                android:layout_width = "match_parent"
                android:layout_height = "match_parent"
                android:orientation = "vertical">

                <com.google.android.material.tabs.TabLayout
                    android:id = "@+id/tabLayoutMailingAddress"
                    style = "@style/tabLayoutStyle"
                    android:layout_width = "match_parent"
                    android:layout_height = "wrap_content"
                    android:layout_marginStart = "@dimen/margin_start"
                    android:layout_marginEnd = "@dimen/margin_end"
                    app:layout_constraintTop_toTopOf = "parent"
                    app:tabInlineLabel = "true"
                    app:tabTextAppearance = "@style/MyCustomTextAppearance" />

                <androidx.viewpager2.widget.ViewPager2
                    android:id = "@+id/viewPagerMailingAddress"
                    android:layout_width = "match_parent"
                    android:layout_height = "0dp"
                    app:layout_constraintHeight_percent = "1.2"
                    app:layout_constraintTop_toBottomOf = "@+id/tabLayoutMailingAddress" />

            </androidx.constraintlayout.widget.ConstraintLayout>

        </androidx.core.widget.NestedScrollView>

    </androidx.coordinatorlayout.widget.CoordinatorLayout>
    
</layout>

0
0
33
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

ViewPager2 не будет хорошо работать внутри NestedScrollView, так как его внутренний RecyclerView по умолчанию включает вложенную прокрутку.

Чтобы исправить неправильное поведение, вам нужно программно отключить эту вложенную прокрутку ViewPager2RecyclerView, поскольку она недоступна в макете:

Котлин:

viewPager.children.find { it is RecyclerView }?.let {
    (it as RecyclerView).isNestedScrollingEnabled = false
}

Джава:

for (int i = 0; i < viewPager.getChildCount(); i++) {
    View child = viewPager.getChildAt(i);
    if (child instanceof RecyclerView) {
        ((RecyclerView) child).setNestedScrollingEnabled(false);
        break;
    }
}

Итак, причина, по которой я использую ViewPager2, заключается в том, что у меня есть пара EditText, которые мне нужны для пользовательского ввода.

Darpal Dhyani 16.03.2022 20:34

Это вкладки TabLayout?

Zain 16.03.2022 20:36

У меня есть 2 вкладки... каждая вкладка (имеет фрагмент) и имеет несколько editTexts внутри обоих фрагментов (вы можете проверить скриншоты, прикрепленные к вопросу) Свернутые и развернутые

Darpal Dhyani 16.03.2022 20:37

Таким образом, эти фрагменты являются страницами ViewPager; прокрутка их, чтобы иметь эффект свертывания, все еще показывает проблему?

Zain 16.03.2022 20:39

Ммм, вроде да... ваш код несколько решил мою проблему, но он просто перестает прокручиваться, как только панель инструментов закрывается вверху... тогда я не могу больше прокручивать

Darpal Dhyani 16.03.2022 20:41

Неважно, Зейн, я разобрался со своей проблемой .... Я смог решить ее в ViewPager У меня был android:layout_height = "0dp" app:layout_constraintHeight_percent = "1.2", который создавал проблему, теперь она, кажется, работает. Спасибо за вашу помощь!

Darpal Dhyani 16.03.2022 20:44

Хорошая работа .. Я думаю, вы могли бы ограничить просмотр пейджера внизу

Zain 16.03.2022 20:47

И последнее, если вы знаете, где я могу узнать больше о том, почему ViewPager2 не очень хорошо с NestedScrollView. Вы сталкивались с какой-либо статьей или проблемой Google?

Darpal Dhyani 16.03.2022 20:51

Я столкнулся с этой проблемой; это не что-то особенное для NestedScrollView; извините, если я не выразил это хорошо; Я имел в виду, когда VP2 обернут в другой вид прокрутки в целом; У меня было что-то подобное; позвольте мне проверить, есть ли что-то полезное в Интернете

Zain 16.03.2022 20:55

Не волнуйтесь! просто интересно узнать об этом больше. Ценить это!

Darpal Dhyani 16.03.2022 20:57

См. этот трекер проблем, пожалуйста; это смесь этого вопроса; и еще одна проблема с вложенными представлениями прокрутки ViewPager2; это также обсуждается документацией здесь

Zain 16.03.2022 21:22

Другие вопросы по теме