Android:ScrollView 与 NestedScrollView

Posted

技术标签:

【中文标题】Android:ScrollView 与 NestedScrollView【英文标题】:Android: ScrollView vs NestedScrollView 【发布时间】:2016-04-18 20:35:16 【问题描述】:

ScrollViewNestedScrollView 有什么区别?他们两个,扩展FrameLayout。我想深入了解两者的优缺点。

【问题讨论】:

For vertical scrolling, consider NestedScrollView instead of scroll view which offers greater user interface flexibility and support for the material design scrolling patterns. 【参考方案1】:

NestedScrollView 顾名思义,用于在另一个滚动视图中需要滚动视图时使用。通常这很难实现,因为系统无法决定滚动哪个视图。

这就是NestedScrollView 的用武之地。

【讨论】:

这是一个示例应用程序,演示了父 ScrollView 中的 NestedScrollView:github.com/AdamSHurwitz/NestedScrolling【参考方案2】:

除了nested scrolling NestedScrollView 添加了一项主要功能,它甚至可以使它在嵌套上下文之外变得有趣:它内置了对OnScrollChangeListener 的支持。将OnScrollChangeListener 添加到原始ScrollView API 23 之下 需要子类化ScrollView 或messing around with the ViewTreeObserver of the ScrollView,这通常意味着比子类化更多的工作。使用NestedScrollView 可以使用build-in setter 完成。

【讨论】:

【参考方案3】:

除了给出的答案中列出的优点之外,NestedScrollView 优于 ScrollView 的另一个优点是它与 CoordinatorLayout 的兼容性。 ScrollView 不配合 CoordinatorLayout。您必须使用 NestedScrollView 来获得工具栏的“滚动屏幕外”行为。

Toolbar will not collapse with Scrollview as child of CoordinatorLayout

【讨论】:

【参考方案4】:

NestedScrollView

NestedScrollView 和 ScrollView 一样,但它支持充当 新旧版本中的嵌套滚动父项和子项 安卓的。默认启用嵌套滚动。

https://developer.android.com/reference/android/support/v4/widget/NestedScrollView.html

滚动视图

可以滚动的视图层次结构的布局容器 用户,允许它大于物理显示器。一种 ScrollView 是一个 FrameLayout,这意味着您应该在其中放置一个孩子 包含要滚动的全部内容;这个孩子本身可能是一个 具有复杂对象层次结构的布局管理器

https://developer.android.com/reference/android/widget/ScrollView.html

【讨论】:

【参考方案5】:

NestedScrollView 就像 ScrollView,但在 NestedScrollView 中我们可以将其他滚动视图作为它的子视图,例如回收站视图。

但是如果我们把 RecyclerView 放在 NestedScrollView 里面,就会扰乱 RecyclerView 的平滑滚动。所以要恢复平滑滚动,有一个窍门:

ViewCompat.setNestedScrollingEnabled(recyclerView, false);

在为 recyclerView 设置适配器后放在上面的行。

【讨论】:

请记住,这样做(嵌套中的recyclerView)在布局传递/措施方面效率很低。测试一下,你会看到 RV 如何停止“回收”视图。【参考方案6】:

我认为使用嵌套滚动视图的一个好处是协调器布局 只监听嵌套的滚动事件。所以如果对于前。您希望工具栏在滚动活动内容时向下滚动,它只会在您在布局中使用嵌套滚动视图时向下滚动。如果您在布局中使用普通滚动视图,则当用户滚动内容时工具栏不会滚动。

【讨论】:

以上是关于Android:ScrollView 与 NestedScrollView的主要内容,如果未能解决你的问题,请参考以下文章

android ScrollView实现原理,求助

Android:检测 ScrollView 何时停止滚动

Nest JS CORS 错误 0 未知,适用于 Android 浏览器,但适用于 PC 浏览器

Android6.0 ScrollView与RecyclerView滑动冲突的问题

ScrollView 与ListView 滑动冲突完美解决

滚动视图中的 Android 列表视图