本文主要是介绍CoordinatorLayout+AppBarLayout+RecyclerView踩过的坑,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
CoordinatorLayout+AppBarLayout+RecyclerView踩过的坑
需求就一句话:实现上滑隐藏菜单栏,下滑显示菜单栏。谁知道我能在这里踩这么多坑,哭
最开始的想法是,监听recyclerview
滑动,向上滑动就隐藏菜单栏,下滑就显示菜单栏
那么问题来了,有抖动!!!
天真的我设了个阈值,滑动距离超过阈值时才隐藏/显示
但是,还有一个问题:由于view是突然显示/隐藏的,后面的view在屏幕上的位置会发生变化,看起来就是整个页面都在闪烁......
经过查阅资料,发现 coordinatorlayout+appbarlayout+recyclervie
可以联动实现appbarlayout
上滑隐藏,下滑显示。
很开心啊,于是开心的用上了
然而,还是有新的问题:
-
在页面可以展示得下
recyclerview
时,recyclerview
居然还可以滑动!!!原谅菜鸡的我直接懵逼了,这是什么人间迷惑???后来去研究了一下,在
HeaderScrollingViewBehavior
中,recyclerview
计算高度的时候还加上了AppBarLayout
的可以滑动的距离,问题大概出在这里吧没办法,只能自己去判断当前页面是否可以完全展示,可以的话禁止
recyclerview
滑动但是这个判断吧,也有点超出我这个菜鸟的能力范围了
怎么说呢,我开始想,这还不简单吗,判断第一个完全显示的item和最后一个完全显示的
item
的pos
不就好了吗,但还真不行,大概recyclerview
的layoutmanager
不是线程安全的吧,总获取不到正确的数据,我只是个菜鸟,这是什么人间惨剧好了,我去找大佬求助了
大佬十分钟就解决了困扰我一上午的问题,大概就是有个类
ViewTreeObserver
,可以获取到线程安全的manager???反正还在迷惑中,打算先把coordinatorlayout
搞清楚了再去看 -
wrap_content
的问题如果
recyclerview
和coordinatorlayout
都设置为wrap_content
,在可以完全展示recyclerview
时会出现这样一个现象:coordinatorlayout
的高度是recyclerview
的高度,在appbarlayout
显示时,recyclerview
有部分会被挡住行吧,那就
match_parent
叭 -
appbarlayout显示不完全
原来设置的是
app:layout_scrollFlags="scroll|enterAlways"
,但是,我发现,在可以滑动时,我把appbarlayout
滑到一半,然后把recyclerview
切换成不可以滑动的选项(切换数据或者切换列数),这个时候recyclerview
不可以滑动对吧,那么appbarlayout
就只能显示一半机智如我,加上了snap,也就是
app:layout_scrollFlags="scroll|enterAlways|snap"
学习的时候都是看着,啊,这样用就可以了啊,好的,我会了;实际用的时候,为什么会这样?这不科学!哭了
这篇关于CoordinatorLayout+AppBarLayout+RecyclerView踩过的坑的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!