为了更好地了解我的处境,我的现状视频:
RecyclerView上面的所有东西都在AppbarLayout里面
具有类似行为的reddit应用程序示例:
目标:
1-从上到下按顺序实现滚动屏幕的视图。
a)[several views that need to scroll top until gone, their combined height is several screen sizes]
b)[view that scrolls until it reaches screen top and then sticks there]
c)[RecyсlerView that scrolls beneath view that sticks on screens top] or [ViewPager with fragments containing RecyclerViews]
2-需要与包含RecyclerView
的fragments
和包含RecyclerViews
的ViewPager
一起工作。
3-保留RecyclerViews回收利用。
到目前为止我的解决方案:
协调器布局,AppBarLayout与appbar_scrolling_view_behavior
和scroll|exitUntilCollapsed
。
基本上,将RecyclerView
上的所有视图都设置为AppBarLayout
,并将属性scroll|exitUntilCollapsed
设置为需要滚动的视图,而不是将任何滚动属性设置为需要保持不变的视图。
解释:
我想将RecyclerView
与multiple view types
一起使用,并将上面的a
和b
组中的views
作为不同的ViewHolders
处理,并将它们放在提供给RecyclerView
的list
的0
和1
索引处。
但没有找到任何解决方案,如何使ViewHolder
粘到屏幕顶部,同时保持其可点击性(交互性)。所有的解决方案都只是画了一个你根本无法沟通的view
。
我匆忙地将CoordinatorLayout
与AppBarLayout
一起使用,并设置了scroll behavior
和scroll flags
问题:
当初始滚动手势发生在AppBar
中,第二个滚动手势出现在子视图中(RecyclerView
或RecyclerView
在ViewPager
中)或相反的顺序时,滚动体验是非常奇怪、滞后和抖动的。
如果发现自定义行为实现和它摆脱了抖动,但仍然存在一些不一致的滚动经验。
问题:
我不是在问如何修复当前解决方案中的滚动。我确信没有解决方案,因为AppbarLayout
一开始就不应该有整个屏幕的height
。所以我没有发布强调滚动错误的视频。
我能完全抛弃CoordinatorLayout和AppBarLayout,实现预期的滚动吗?我花了几个小时(如果不是数日)来寻找实现这个T_T的方法。
如果你需要更多的信息,请告诉我。
发布于 2022-06-29 06:32:36
TL;DR;
也许这个图书馆能帮上忙。它有可点击的带有粘性头的RecyclerView。https://github.com/davideas/FlexibleAdapter
TL末端;DR;
个人建议Android是另一个Linux发行版,它具有预先存在的UI小部件。假设您获得了没有UI的Linux发行版,并且在使用Android作为参考时必须自己实现它们。最好的方法是阅读AOSP源代码和相关的Github projects.However的源代码,任务非常艰巨,所以首先您必须将它们划分为可管理的块。
你要处理的是滚动和触觉的逻辑。滚动很困难,尤其是嵌套滚动Android有3次NestedScrollingChild和NestedScrolling父循环。它在BottomSheets和所有其他地方与CoordinatorLayoutBehaviour一起使用,在NumberPickers中,在ViewPagers中,在RecyclerViews中,在任何地方都有一个卷轴。
观看谈论触摸处理/回收查看由戴夫史密斯,自定义观看视频由千木成龙,其他相关视频。关于嵌套滚动的文章:https://www.androiddesignpatterns.com/2018/01/experimenting-with-nested-scrolling.html
最后阅读相关Github项目的源代码,并对它们进行实验:https://github.com/frogermcs/InstaMaterial。
https://github.com/trafi/anchor-bottom-sheet-behavior
https://github.com/ZieIony/Carbon
https://github.com/AndroidDeveloperLB/LollipopContactsRecyclerViewFastScroller
当你寻找一个较小的包含性问题时,你会发现很多其他问题。
这需要时间不是一天,一周,而是几个月。不过,最后您将了解View如何在Android上工作,以及它的局限性是什么。
发布于 2022-06-29 01:49:28
Reddit应用程序行为不同的原因是它似乎使用了WebView
;这是CSS滚动行为。但是,可以嵌套XML或相同的组合组件。这可能不会封装在AppBarLayout
中,但肯定会嵌套到ViewPager2
的实际内容区域中。
假定这种结构:
Fragment
ViewPager2
Fragment
CoordinatorLayout
AppBarLayout <-- maybe, maybe not
CollapsingToolbarLayout <-- most definitely
Toolbar
NestedScrollView <-- scroll happens here
RecylerView
NestedScrollView
app:layout_behavior
和CollapsingToolbarLayout
的滚动标志控制这一点。我不确定那里是否需要AppBarLayout
,因为CollapsingToolbarLayout
驻留在包appbar
中。请考虑这两种可能性。使用NestedScrollView
包装什么很重要(它不是父Fragment
,ViewPager2
驻留在其中)。
https://stackoverflow.com/questions/72743500
复制相似问题