从 API 28(Android 9.0,Pie)开始,Google 推荐开发者从原来的各种支持库转移到一个新版本的名为 AndroidX 的支持库。它相比老支持库有着无需操心版本控制、实时更新的优点。原有的支持库将被保留并且可以继续使用,但接下来所有新的支持都将发布在 AndroidX 上。
比如我们在我们的资源布局文件当中使用 RecyclerView,如果不使用 AndroidX 的话会引用 android.support.v7.widget.RecyclerView
,而如果配置工程使用 AndroidX 的话会引用 androidx.recyclerview.widget.RecyclerView
。
Google 希望开发者可以尽快使用 AndroidX 以获得最新的支持,但是当我尝试将我自己的项目支持库转移到 AndroidX 库时发现会有 bug。比如我在一个项目中试图实现嵌套滑动:
嵌套滑动示例比方说上图的这个例子,一个 BottomSheet 里面有一个 RecyclerView,在下拉列表时如果拉到顶部时不松手继续向下拉,BottomSheet 就会向下滑动回到底部(BottomSheetBehavior.STATE_COLLAPSED
)状态。
实现这个嵌套滑动比较简单,只要实现 NestedScrollView
的 onStartNestedScroll()
方法和 onNestedPreScroll()
方法就可以了。
不过当我点击 Android Studio 的 Refactor > Migrate to AndroidX... ,将项目的支持库全部更新到 AndroidX 后,再次运行 app,结果成了这个样子:
使用 AndroidX 以后的结果经检查,发现 onStartNestedScroll()
方法和 onNestedPreScroll()
方法都没有执行。因为转移前后代码没有更改过,所以我还不知道为什么会出现这样的结果,可能是 AndroidX 的一个 bug,我想。
虽然 Google 声称在 2018 年 9 月 21 日后发行的 AndroidX 1.0.0 是稳定版本,但从之前各个 Beta 版本的发行说明来看,关于 RecyclerView 的 bug 还会有不少。所以我推荐大家目前还是使用比较稳定的旧版支持库,毕竟是使用了几年的版本了。不过大家也可以尝试一下这个新的库,看看还会有什么样的问题存在。
网友评论