前言
首先,我相信Android应用层开发的小伙伴们大部分都使用过AppBarLayout这个布局吧。对,就是大家所熟悉的经典的CoordinatorLayout + AppBarLayout + CollapsingToolbarLayout + TabLayout + NestedScrollView(不知道如何使用的可以参考这篇文章 https://www.jianshu.com/p/06c0ae8d9a96 )。也许大家都会认同以上布局组合在实际应用场景中非常好用,然而,AppBaryLayout其实还是存在着一些滑动问题的。
问题描述
- 快速滑动AppBarLayout会出现回弹;
- 快速滑动AppBarLayout到折叠状态下,立马下拉会出现抖动现象;
- 滑动AppBarLayout过程中,无法像RecyclerView那样通过手指按下停止滚动。
问题分析
一切都是AppBarLayout的惯性滑动(fling)事件惹的祸。
解决方案
gradle
Step 1. Add the JitPack repository in your root build.gradle at the end of repositories:
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
Step 2. Add the dependency in your app build.gradle:
dependencies {
implementation 'com.github.yuruiyin:AppbarLayoutBehavior:v1.0.2'
}
xml
<android.support.design.widget.AppBarLayout
android:id="@+id/appBarLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/white"
android:fitsSystemWindows="false"
app:layout_behavior="com.yuruiyin.appbarlayoutbehavior.AppBarLayoutBehavior"
>
......
</android.support.design.widget.AppBarLayout>
来自( https://github.com/yuruiyin/AppbarLayoutBehavior ) 。
其实就是从AppBarLayout的惯性滑动开刀,在合适的时机停止惯性滑动即可。对如何解决感兴趣的同学,可以直接查看源码研究,也希望有遇到什么问题的小伙伴可以提issue来互相探讨。
总结
本文虽然没有详细介绍问题的解决思路,但是我相信本文绝对干货,因为你用了上面所述的AppBarLayoutBehavior,就可以开开心心地使用几近完美的AppBarLayout了。难道这还不够吗? 对,当然不够,因为俗话说得好:我们不仅要知其然,还得知其所以然。所以呢,还是希望大家自行去研究一下我提交到github上面的AppbarLayoutBehavior的源码。
题外话
如果觉得本文的内容有帮助到大家就给个赞呗~