嵌套滚动视图内的 Recyclerview 滚动但不像普通 Recyclerview 或嵌套滚动视图那样快速滚动

Recyclerview inside Nested Scrollview scroll but does not fast scroll like normal Recyclerview or Nested Scrollview

我在 NestedScrollView 中使用 RecyclerView 并且它有效。但是当我在 LinearLayout 或其他东西中使用 RecyclerView 时,它会根据手势以不同的速度滚动。滚动会听手势,如果我只向上滑动一点,它就会滚动一点;如果我向上滑动得非常快,它就会滚动得非常快。现在我的问题是 NestedScrollView 里面的 RecyclerView 当然可以滚动,但是快速滚动不起作用。但是我向上滑动或快或慢,RecyclerViewNestedScrollView只滚动一点点。

如何让滚动视图中的 NestedScrollViewRecyclerView 以不同的速度滚动?

尝试

recyclerView.setNestedScrollingEnabled(false);

您应该将回收视图包装在任何布局中,例如 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>

我正在研究 android 16,其中无法使用 setNestedSCrollEnabled 方法,

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

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

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

            @Override
            public boolean canScrollVertically() {
                return false;
            }
        });

默认情况下 setNestedScrollingEnabled 仅在 API-21.

之后有效

您可以使用 ViewCompat.setNestedScrollingEnabled(recyclerView, false); 禁用 API-21(Lollipop) 前后的嵌套滚动。 Link to documentation.

我是 WAI。 NestedScrollView 使用规范 "Unspecified" 测量其 children。 child 也可以随心所欲地增长。

这基本上等于 NSV 和 RV 的高度。所以就房车而言,相信完全展现出来了。

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

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

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

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

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

    scrollView.setNestedScrollingEnabled(false);
    

您可以将 ScrollView 与覆盖 onMeasure 方法的 ExtendRecyclerView class 结合使用。这对我有用!

@Override
protected void onMeasure(int widthSpec, int heightSpec) {
    int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST);
    super.onMeasure(widthSpec, expandSpec);
}
recyclerView.setNestedScrollingEnabled(false);

会有用sometimes.But不建议所有times.because它禁用recylcer视图中的视图回收功能。

备选方案:

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

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

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>

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