Ответ 1
попробовать
recyclerView.setNestedScrollingEnabled(false);
Я использую 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);
Если вы используете LinearLayout внутри NestedScrollingView, возьмите LinearLayout внутри обычного ScrollView и затем установите его прокрутку в
scrollView.setNestedScrollingEnabled(false);
Вы можете использовать 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);
}
recyclerView.setNestedScrollingEnabled(false);
Будет полезно иногда. Но это нецелесообразно для всех времен. Потому что он отключает функцию рециркуляции вида в режиме recylcer.
Альтернатива:
Попробуйте CollapsiveToolbarLayout с просмотром Recycler. поместить другие представления в collapsiveTollbar layout.
Это WAI. NestedScrollView измеряет свои дочерние элементы с помощью Spec "Unspecified". Ребенок может расти как можно больше.
Это, по существу, означает высоту NSV и RV. Что касается RV, он считает, что он полностью отображается.
Оберните свой RV LL и дайте RV высоту. LL не установил бы, чтобы спецификация измерения была НЕ ОПРЕДЕЛЕНА, чтобы RV правильно прокручивал в пределах своей установленной высоты любые DP, которые вы предоставляете.
Единственный недостаток этого метода заключается в том, что вы не сможете сделать родительский матч в своем RV.
Вы должны перенести вид ресайзера в любой макет, например 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>