102

我在RecyclerView里面使用NestedScrollView,它可以工作。但是当我使用RecyclerViewinsideLinearLayout或其他东西时,它会根据手势以不同的速度滚动。滚动听手势,如果我只向上滑动一点,那么它会滚动一点,而如果我真的快速向上滑动,那么它就会滚动得非常快。现在我的问题是RecyclerView里面NestedScrollView肯定滚动但快速滚动不起作用。但是我快速或缓慢地向上滑动,RecyclerView或者NestedScrollView只滚动一点。

如何使我的NestedScrollViewRecyclerView在该滚动视图中以不同的速度滚动?

4

11 回答 11

267

尝试

recyclerView.setNestedScrollingEnabled(false);
于 2016-05-20T03:50:27.537 回答
54

默认情况下setNestedScrollingEnabled仅在 API-21 之后有效。

您可以使用ViewCompat.setNestedScrollingEnabled(recyclerView, false);在 API-21(Lollipop) 之前和之后禁用嵌套滚动。链接到文档

于 2017-04-17T11:00:49.927 回答
21

我正在使用 android 16 无法使用 setNestedSCrollEnabled 方法,

我最终做了什么来阻止 RecyclerView 处理 Scrolls。

就像在 LinerLayoutManager 中一样,我将 canScrollHorizo​​ntally 和 canScrollVertically 设置为默认返回 false。

myRecyclerView.setLayoutManager(new LinearLayoutManager(getContext(), LinearLayoutManager.VERTICAL, false){
            @Override
            public boolean canScrollHorizontally() {
                return false;
            }

            @Override
            public boolean canScrollVertically() {
                return false;
            }
        });
于 2017-02-07T17:52:38.163 回答
10

经过几次迭代,我想出了一个解决方案。

  1. 如果您使用的是 RecyclerView,则:

    recyclerView.setNestedScrollingEnabled(false);
    
  2. 如果您在 NestedScrollingView 中使用 LinearLayout,请在普通 ScrollView 中使用 LinearLayout,然后将其滚动设置为

    scrollView.setNestedScrollingEnabled(false);
    
于 2017-05-23T07:29:29.380 回答
3

android:overScrollMode="从不

  <android.support.v4.widget.NestedScrollView
    android:id="@+id/nestedScrollView"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:overScrollMode="never">


    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">

        <android.support.v7.widget.RecyclerView
            android:id="@+id/recyclerView"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />

    </LinearLayout>
 </android.support.v4.widget.NestedScrollView>
于 2018-12-20T00:47:31.573 回答
1

您可以将 ScrollView 与重写 onMeasure 方法的 ExtendRecyclerView 类一起使用。这对我行得通!

@Override
protected void onMeasure(int widthSpec, int heightSpec) {
    int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST);
    super.onMeasure(widthSpec, expandSpec);
}
于 2017-06-24T09:48:40.307 回答
1
recyclerView.setNestedScrollingEnabled(false);

有时会很有用。但并不总是建议这样做。因为它会禁用 recycler 视图中的视图回收功能。

备择方案:

尝试使用 Recycler 视图的 CollapsiveToolbarLayout。将其他视图放在 collapsiveTollbar 布局中。

于 2017-11-16T07:13:57.780 回答
-2

在我的案例中,我将所有图像放在 drawable-xxxhdpi 文件夹的可绘制文件夹中,这就是我的屏幕 UI 滞后的原因。

于 2019-12-27T12:58:40.957 回答
-2

我也遇到了这个问题。并升级以26.1.0修复它。

于 2018-05-23T02:21:56.907 回答
-3

这是WAI。NestedScrollView 使用规范“未指定”测量其子级。孩子也可以随心所欲地成长。

这基本上等同于 NSV 和 RV 的高度。所以就房车而言,它认为它是完全展示出来的。

用 LL 包裹您的 RV,并给您的 RV 一个高度。LL 不会将测量规格设置为未指定,因此 RV 将在您提供的任何 DP 的设置高度内正确滚动。

此方法的唯一缺点是您将无法在 RV 上进行匹配父项。

于 2017-05-06T09:36:45.833 回答
-4

您应该将回收器视图包装在任何布局中,例如 LinearLayout 并将 RecyclerView 的大小设置为常量,例如 800dp。这将启用平滑滚动,并且回收器视图在滚动期间仍将回收器视图。

<android.support.v4.widget.NestedScrollView xmlns:android="http://schemas.android.com/apk/res/android"
                                xmlns:app="http://schemas.android.com/apk/res-auto"
                                android:layout_width="match_parent"
                                android:layout_height="match_parent"
                                android:orientation="vertical">

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <android.support.v7.widget.RecyclerView
        android:layout_width="match_parent"
        android:layout_height="800dp"
        app:layout_behavior="@string/appbar_scrolling_view_behavior"/>
</LinearLayout>

于 2016-10-03T09:55:15.847 回答