嵌套滚动视图内的 Recyclerview 滚动但不像普通 Recyclerview 或嵌套滚动视图那样快速滚动
Recyclerview inside Nested Scrollview scroll but does not fast scroll like normal Recyclerview or Nested Scrollview
我在 NestedScrollView
中使用 RecyclerView
并且它有效。但是当我在 LinearLayout
或其他东西中使用 RecyclerView
时,它会根据手势以不同的速度滚动。滚动会听手势,如果我只向上滑动一点,它就会滚动一点;如果我向上滑动得非常快,它就会滚动得非常快。现在我的问题是 NestedScrollView
里面的 RecyclerView
当然可以滚动,但是快速滚动不起作用。但是我向上滑动或快或慢,RecyclerView
或NestedScrollView
只滚动一点点。
如何让滚动视图中的 NestedScrollView
或 RecyclerView
以不同的速度滚动?
尝试
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 中一样,我将 canScrollHorizontally、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。
经过多次迭代,我想出了一个解决方案。
如果您使用的是 RecyclerView,那么:
recyclerView.setNestedScrollingEnabled(false);
如果您在 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 滞后的原因。
我在 NestedScrollView
中使用 RecyclerView
并且它有效。但是当我在 LinearLayout
或其他东西中使用 RecyclerView
时,它会根据手势以不同的速度滚动。滚动会听手势,如果我只向上滑动一点,它就会滚动一点;如果我向上滑动得非常快,它就会滚动得非常快。现在我的问题是 NestedScrollView
里面的 RecyclerView
当然可以滚动,但是快速滚动不起作用。但是我向上滑动或快或慢,RecyclerView
或NestedScrollView
只滚动一点点。
如何让滚动视图中的 NestedScrollView
或 RecyclerView
以不同的速度滚动?
尝试
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 中一样,我将 canScrollHorizontally、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。
经过多次迭代,我想出了一个解决方案。
如果您使用的是 RecyclerView,那么:
recyclerView.setNestedScrollingEnabled(false);
如果您在 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 滞后的原因。