在 CollapsingToolbarLayout 内部有一个带有嵌套 AppBarLayout 的 CoordinatorLayout,其中有一个工具栏 + 图片。AppBar 下方是一个带有嵌套片段的 ViewPager。ViewPager 有行为:appbar_scrolling_view_behavior. 因此,当滚动片段的内容时,应用栏会折叠。
<androidx.coordinatorlayout.widget.CoordinatorLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_above="@id/bottomNavViewCoreAct"
android:fitsSystemWindows="true">
<com.google.android.material.appbar.AppBarLayout
style="@style/AppBarLayoutSchool"
android:id="@+id/appBarCoreAct">
<com.google.android.material.appbar.CollapsingToolbarLayout
style="@style/CollapsingToolbar"
android:id="@+id/collapsToolbarCoreAct"
app:layout_scrollFlags="scroll|exitUntilCollapsed"
app:expandedTitleTextAppearance="@style/CollapsingTextAppearance.Inverse"
app:contentScrim="?colorPrimary">
<ImageView
android:layout_width="fill_parent"
android:layout_height="300dp"
android:src="@drawable/london_flat"
android:tint="@color/colorWhiteAlfa"
android:scaleType="centerCrop"
android:contentDescription="@string/service_image_item"
android:id="@+id/imgToolbarCoreAct"/>
<androidx.appcompat.widget.Toolbar
style="@style/Toolbar"
android:id="@+id/toolbarCoreAct"
app:layout_collapseMode="pin"/>
</com.google.android.material.appbar.CollapsingToolbarLayout>
</com.google.android.material.appbar.AppBarLayout>
<androidx.viewpager.widget.ViewPager
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/viewPagerCore"
android:layout_below="@+id/appBarCoreAct"
app:layout_behavior="@string/appbar_scrolling_view_behavior"/>
</androidx.coordinatorlayout.widget.CoordinatorLayout>
但是,在其中一个片段中,我需要折叠 AppBar 并将其固定在此位置。
val appBarCoreAct = findViewById<AppBarLayout>(R.id.appBarCoreAct)
appBarCoreAct.setExpanded(false)
上面的代码只是折叠了工具栏,但它会继续展开。如果你设置一个标志CollapsingToolbarLayout
(collapsToolbarCoreAct.layoutParams as AppBarLayout.LayoutParams).scrollFlags = AppBarLayout.LayoutParams.SCROLL_FLAG_SNAP
该图像将是全尺寸(大约是屏幕的一半)。我尝试更改图像的大小并在设置标志时使其不可见,但在这种情况下,标题为CollapsingToolbarLayout.
告诉我如何折叠 AppBarLayout 并防止它在滚动时展开。
来自英语堆栈帖子的克里斯拉森的回答有所帮助。就我而言,在过渡到目标片段期间执行了以下操作:
...我们得到当前显示在屏幕上的所需片段并
pageFragment.view?.isNestedScrollingEnabled = false准备就绪但是,有一个小问题。由于nestedScroll 被禁用,如果片段有一个列表,那么最后一个元素将不会完全适合屏幕,因为工具栏占用空间。你可以解决这个问题 - 缩进。