Mar*_* RS 5 android-recyclerview android-collapsingtoolbarlayout android-appbarlayout android-viewpager2
我正在构建一个应用程序,它使用 来ViewPager2水平滚动页面,每个页面都有一个垂直滚动的内容RecyclerView,其中每个列表的第一个位置都有一行带有水平滚动小部件(例如另一个)RecyclerView或ViewPager2附加到寻呼机指示器类型小部件,如从下图。
父 ViewPager2 是 CoordinatorLayout 的子级,当 RecyclerView 垂直滚动时,它会处理折叠顶部内容。然后,此 ViewPager2 会膨胀水平滚动的片段。所以我们有parent layout:
-- CoordinatorLayout
-- FrameLayout - has appbar scrolling behavior
-- ViewPager2
-- AppBarLayout
-- CollapsingToolbarLayout
-- ImageView - background
-- Toolbar
-- ConstraintLayout - Holds title and date
Run Code Online (Sandbox Code Playgroud)
父 ViewPager2 child fragments' layout:
-- FrameLayout
-- RecyclerView
-- Pager Indicator
Run Code Online (Sandbox Code Playgroud)
RecyclerView 内容的第一行具有相同的布局:
-- FrameLayout
-- RecyclerView
-- Pager Indicator
Run Code Online (Sandbox Code Playgroud)
您可以从上面的屏幕截图中看到,第一次加载时RecyclerView重叠,AppBarLayout这是正确的行为。marginTop我向的父布局添加了 negativeRecyclerView来达到这种效果。我正在跟踪 AppBarLayout 偏移量的变化,AppBarLayout.OnOffsetChangedListener当用户向上滚动时,我会减少或增加这个负边距,以使列表在AppBarLayout.
我面临的问题是,如果我从列表中的第一项开始垂直滚动,则AppBarLayout不会触发开始折叠其内容,因此内容会过早地结束在AppBarLayout. 请看下面的截图:
我希望 AppBarLayout 内容在我开始内容 RecyclerView 滚动时立即开始向上滚动,即使它是从第一个位置启动的。似乎第一个项目RecyclerView没有提醒AppBarLayout开始崩溃。如果我从 RecyclerView 中的其他项目开始滚动,则会观察到正确的行为。如果我从第一行向上拖动并按住,那么也会观察到该错误。
我试图实现的行为的一个很好的例子是 Google 新闻应用程序,其中有一个新闻部分的选项卡。以下是我所期待的:
事实证明,解决方案很简单。如果您有嵌套的 RecyclerView 或类似容器,那么您必须使用:
RecyclerView.setNestedScrollingEnabled(false)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1278 次 |
| 最近记录: |