ScrollView
和 NestedScrollView
有什么区别?两者都扩展 FrameLayout
。我想深入了解两者的优缺点。
NestedScrollView
顾名思义,用于在另一个滚动视图中需要滚动视图时使用。通常这很难完成,因为系统将无法决定滚动哪个视图。
这就是 NestedScrollView
的用武之地。
除了 nested scrolling NestedScrollView
添加了一项主要功能,它甚至可以使它在嵌套上下文之外变得有趣:它内置了对 OnScrollChangeListener
的支持。将 OnScrollChangeListener
添加到原始 ScrollView
低于 API 23 需要子类化 ScrollView
或 messing around with the ViewTreeObserver
of the ScrollView
,这通常意味着比子类化更多的工作。使用 NestedScrollView
可以使用 build-in setter 完成。
除了给出的答案中列出的优点之外,NestedScrollView 优于 ScrollView 的另一个优点是它与 CoordinatorLayout 的兼容性。 ScrollView 不配合 CoordinatorLayout。您必须使用 NestedScrollView 来获得工具栏的“滚动屏幕外”行为。
Toolbar will not collapse with Scrollview as child of CoordinatorLayout
嵌套滚动视图
NestedScrollView 就像 ScrollView 一样,但它支持在新旧版本的 Android 上充当嵌套滚动父项和子项。默认情况下启用嵌套滚动。
https://developer.android.com/reference/android/support/v4/widget/NestedScrollView.html
滚动视图
用户可以滚动的视图层次结构的布局容器,允许它大于物理显示。 ScrollView 是 FrameLayout,这意味着您应该在其中放置一个包含要滚动的全部内容的子视图;这个孩子本身可能是一个具有复杂对象层次结构的布局管理器
https://developer.android.com/reference/android/widget/ScrollView.html
NestedScrollView 就像 ScrollView 一样,但是在 NestedScrollView 中我们可以将其他滚动视图作为它的子视图,例如 RecyclerView。
但是如果我们把 RecyclerView 放在 NestedScrollView 里面,就会扰乱 RecyclerView 的平滑滚动。因此,要恢复平滑滚动,有一个窍门:
ViewCompat.setNestedScrollingEnabled(recyclerView, false);
在为 recyclerView 设置适配器后放在上面的行。
我认为使用嵌套滚动视图的一个好处是协调器布局只监听嵌套滚动事件。所以如果对于前。您希望工具栏在滚动活动内容时向下滚动,它只会在您在布局中使用嵌套滚动视图时向下滚动。如果您在布局中使用普通滚动视图,则当用户滚动内容时工具栏不会滚动。
<androidx.core.widget.NestedScrollView android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:android="http://schemas.android.com/apk/res/android">
// your Layout xml code
</androidx.core.widget.NestedScrollView>