CoordinatorLayout+AppBarLayout+RecyclerView踩过的坑

CoordinatorLayout+AppBarLayout+RecyclerView踩过的坑

需求就一句话:实现上滑隐藏菜单栏,下滑显示菜单栏。谁知道我能在这里踩这么多坑,哭

最开始的想法是,监听recyclerview滑动,向上滑动就隐藏菜单栏,下滑就显示菜单栏

那么问题来了,有抖动!!!

天真的我设了个阈值,滑动距离超过阈值时才隐藏/显示

但是,还有一个问题:由于view是突然显示/隐藏的,后面的view在屏幕上的位置会发生变化,看起来就是整个页面都在闪烁......

经过查阅资料,发现 coordinatorlayout+appbarlayout+recyclervie可以联动实现appbarlayout上滑隐藏,下滑显示。

很开心啊,于是开心的用上了

然而,还是有新的问题:

  • 在页面可以展示得下recyclerview时,recyclerview居然还可以滑动!!!

    原谅菜鸡的我直接懵逼了,这是什么人间迷惑???后来去研究了一下,在HeaderScrollingViewBehavior中,recyclerview计算高度的时候还加上了AppBarLayout的可以滑动的距离,问题大概出在这里吧

    没办法,只能自己去判断当前页面是否可以完全展示,可以的话禁止recyclerview滑动

    但是这个判断吧,也有点超出我这个菜鸟的能力范围了

    怎么说呢,我开始想,这还不简单吗,判断第一个完全显示的item和最后一个完全显示的itempos不就好了吗,但还真不行,大概recyclerviewlayoutmanager不是线程安全的吧,总获取不到正确的数据,我只是个菜鸟,这是什么人间惨剧

    好了,我去找大佬求助了

    大佬十分钟就解决了困扰我一上午的问题,大概就是有个类ViewTreeObserver,可以获取到线程安全的manager???反正还在迷惑中,打算先把coordinatorlayout搞清楚了再去看

  • wrap_content的问题

    如果recyclerviewcoordinatorlayout都设置为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"

学习的时候都是看着,啊,这样用就可以了啊,好的,我会了;实际用的时候,为什么会这样?这不科学!哭了

你可能感兴趣的:(安卓踩坑合集,安卓基础,安卓)