Android:ScrollView 与 NestedScrollView
Posted
技术标签:
【中文标题】Android:ScrollView 与 NestedScrollView【英文标题】:Android: ScrollView vs NestedScrollView 【发布时间】:2016-04-18 20:35:16 【问题描述】:ScrollView
和 NestedScrollView
有什么区别?他们两个,扩展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的主要内容,如果未能解决你的问题,请参考以下文章
Nest JS CORS 错误 0 未知,适用于 Android 浏览器,但适用于 PC 浏览器