Recyclerview внутри вложенного Scrollview прокрутка, но не быстрая прокрутка, как обычный Recyclerview или вложенный Scrollview
я использую RecyclerView внутри NestedScrollView и это работает. Но когда я использую RecyclerView внутри LinearLayout или что-то, это прокрутка в различной скорости в зависимости от жеста. Прокрутка прослушивает жест, и если я скользну вверх только немного, то он прокручивается немного, а если я скользну вверх очень быстро, то он прокручивается очень быстро. Теперь моя проблема в том, что RecyclerView внутри NestedScrollView конечно, но прокрутки быстрая прокрутка не работает. Однако я скользить вверх быстро или медленно, RecyclerView или NestedScrollView только прокрутите немного.
как я могу сделать мой NestedScrollView или RecyclerView внутри этого прокрутки прокрутки с различной скоростью?
10 ответов:
по умолчанию
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);Если вы используете LinearLayout внутри NestedScrollingView, возьмите LinearLayout внутри обычного ScrollView, а затем установите его прокрутку в
scrollView.setNestedScrollingEnabled(false);
recyclerView.setNestedScrollingEnabled(false);иногда будет полезно.Но это не рекомендуется для всех времен.потому что он отключает функцию просмотра рециркуляции в представлении recylcer.
варианты:
попробуйте CollapsiveToolbarLayout с видом Recycler. поместите другие виды в макет collapsiveTollbar.
вы можете использовать ScrollView с ExtendRecyclerView класс, который переопределяет метод onMeasure. Это работает для меня!
@Override protected void onMeasure(int widthSpec, int heightSpec) { int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST); super.onMeasure(widthSpec, expandSpec); }
Это вай. NestedScrollView измеряет свои дочерние элементы с помощью спецификации "Unspecified". Ребенок тоже может расти столько, сколько захочет.
Это по существу приравнивает высоту NSV и RV. Так что что касается RV, он считает, что он полностью отображается.
оберните ваш RV С LL и дайте вашему RV высоту. LL не будет устанавливать спецификацию измерения неуказанной, поэтому RV будет правильно прокручиваться в пределах установленной высоты любого DPs, который вы обеспечивать.
единственным недостатком этого метода является то, что вы не сможете сделать матч родителя на вашего RV.
вы должны обернуть recycler view в любом макете, например LinearLayout, и установить размер RecyclerView постоянным, например 800dp. Это позволит плавную прокрутку и recycler view будет по-прежнему recycler views во время прокрутки.
<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>
Comments