RecyclerView
内でNestedScrollView
を使用していますが、動作します。しかし、RecyclerView
などの中でLinearLayout
を使用すると、ジェスチャーに応じてさまざまな速度でスクロールします。スクロールはジェスチャーに耳を傾けます。少しだけ上にスライドすると少しスクロールし、本当に上にスライドすると非常に速くスクロールします。今、私の問題はRecyclerView
内のNestedScrollView
が確かにスクロールするが、高速スクロールが機能しないことです。ただし、RecyclerView
またはNestedScrollView
は高速または低速で上にスライドしますが、少しだけスクロールします。
スクロールビュー内でNestedScrollView
またはRecyclerView
をさまざまな速度でスクロールするにはどうすればよいですか?
試してみる
recyclerView.setNestedScrollingEnabled(false);
デフォルトでは、setNestedScrollingEnabled
はAPI-21の後にのみ機能します。
ViewCompat.setNestedScrollingEnabled(recyclerView, false);
を使用して、API-21(Lollipop)の前後でネストされたスクロールを無効にできます。 ドキュメントへのリンク 。
この助けを願っています!
私はAndroid 16で作業していましたが、setNestedSCrollEnabledメソッドを使用することはできませんでしたが、
RecyclerViewがスクロールを処理しないようにするために私がやることになります。
LinerLayoutManagerと同様、canScrollHorizontallyを作成し、canScrollVerticallyを作成してデフォルトでfalseを返します。
myRecyclerView.setLayoutManager(new LinearLayoutManager(getContext(), LinearLayoutManager.VERTICAL, false){
@Override
public boolean canScrollHorizontally() {
return false;
}
@Override
public boolean canScrollVertically() {
return false;
}
});
何度か繰り返した後、私は解決策を思いつきました。
RecyclerViewを使用している場合:
recyclerView.setNestedScrollingEnabled(false);
NestedScrollingView内でLinearLayoutを使用している場合、通常のScrollView内でLinearLayoutを取得し、そのスクロールを
scrollView.setNestedScrollingEnabled(false);
recyclerView.setNestedScrollingEnabled(false);
便利な場合もありますが、常に使用することはお勧めできません。なぜなら、レシレサービューではビューリサイクル機能が無効になるからです。
代替案:
CollapsiveToolbarLayoutをリサイクルビューで試してください。 collapsiveTollbarレイアウトに他のビューを配置します。
Android:overScrollMode = "never
<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>
私もこの問題に出会いました。そして、26.1.0
にアップグレードして修正します。
OnMeasureメソッドをオーバーライドするExtendRecyclerViewクラスでScrollViewを使用できます。それは私のために働く!
@Override
protected void onMeasure(int widthSpec, int heightSpec) {
int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST);
super.onMeasure(widthSpec, expandSpec);
}