Я пытаюсь чего-то добиться с макетом 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>
ViewPager2
не будет хорошо работать внутри NestedScrollView
, так как его внутренний RecyclerView
по умолчанию включает вложенную прокрутку.
Чтобы исправить неправильное поведение, вам нужно программно отключить эту вложенную прокрутку ViewPager2
RecyclerView
, поскольку она недоступна в макете:
Котлин:
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;
}
}
Это вкладки TabLayout
?
У меня есть 2 вкладки... каждая вкладка (имеет фрагмент) и имеет несколько editTexts внутри обоих фрагментов (вы можете проверить скриншоты, прикрепленные к вопросу) Свернутые и развернутые
Таким образом, эти фрагменты являются страницами ViewPager; прокрутка их, чтобы иметь эффект свертывания, все еще показывает проблему?
Ммм, вроде да... ваш код несколько решил мою проблему, но он просто перестает прокручиваться, как только панель инструментов закрывается вверху... тогда я не могу больше прокручивать
Неважно, Зейн, я разобрался со своей проблемой .... Я смог решить ее в ViewPager
У меня был android:layout_height = "0dp" app:layout_constraintHeight_percent = "1.2"
, который создавал проблему, теперь она, кажется, работает. Спасибо за вашу помощь!
Хорошая работа .. Я думаю, вы могли бы ограничить просмотр пейджера внизу
И последнее, если вы знаете, где я могу узнать больше о том, почему ViewPager2
не очень хорошо с NestedScrollView
. Вы сталкивались с какой-либо статьей или проблемой Google?
Я столкнулся с этой проблемой; это не что-то особенное для NestedScrollView
; извините, если я не выразил это хорошо; Я имел в виду, когда VP2 обернут в другой вид прокрутки в целом; У меня было что-то подобное; позвольте мне проверить, есть ли что-то полезное в Интернете
Не волнуйтесь! просто интересно узнать об этом больше. Ценить это!
См. этот трекер проблем, пожалуйста; это смесь этого вопроса; и еще одна проблема с вложенными представлениями прокрутки ViewPager2; это также обсуждается документацией здесь
Итак, причина, по которой я использую
ViewPager2
, заключается в том, что у меня есть параEditText
, которые мне нужны для пользовательского ввода.