developer tip

Nested Scrollview 스크롤 내부의 Recyclerview가 일반 Recyclerview 또는 Nested Scrollview처럼 빠르게 스크롤되지 않습니다.

copycodes 2020. 9. 6. 10:12
반응형

Nested Scrollview 스크롤 내부의 Recyclerview가 일반 Recyclerview 또는 Nested Scrollview처럼 빠르게 스크롤되지 않습니다.


나는 RecyclerView내부를 사용 NestedScrollView하고 있으며 작동합니다. 하지만 RecyclerView내부 등을 사용하면 LinearLayout제스처에 따라 다양한 속도로 스크롤됩니다. 스크롤은 제스처를 듣고 조금만 위로 밀면 조금 스크롤되고 정말 빠르게 위로 밀면 정말 빠르게 스크롤됩니다. 이제 내 문제는 RecyclerView내부가 NestedScrollView확실히 스크롤되지만 빠른 스크롤이 작동하지 않는다는 것입니다. 그러나 나는 빠르게 또는 느리게 최대 슬라이드, RecyclerView또는 NestedScrollView단지 조금 스크롤합니다.

NestedScrollView또는 RecyclerView내부 스크롤 뷰를 다양한 속도로 스크롤하려면 어떻게해야합니까?


시험

recyclerView.setNestedScrollingEnabled(false);

기본적으로 setNestedScrollingEnabledAPI-21 이후에만 작동합니다.

ViewCompat.setNestedScrollingEnabled(recyclerView, false);API-21 (Lollipop) 전후에 중첩 스크롤을 비활성화 하는 사용할 수 있습니다 . 문서 링크 .

이 도움을 바랍니다!


setNestedSCrollEnabled 메서드를 사용할 수없는 Android 16에서 작업 중이었습니다.

RecyclerView가 Scrolls를 처리하는 것을 막기 위해 내가하는 일.

LinerLayoutManager에서와 마찬가지로 canScrollHorizontally, canScrollVertically를 만들어 기본적으로 false를 반환합니다.

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

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

여러 번 반복 한 후 해결책을 찾았습니다.

  1. RecyclerView를 사용하는 경우 :

    recyclerView.setNestedScrollingEnabled(false);
    
  2. NestedScrollingView 내에서 LinearLayout을 사용하는 경우 일반 ScrollView 내에서 LinearLayout을 가져온 다음 스크롤을

    scrollView.setNestedScrollingEnabled(false);
    

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>

recyclerView.setNestedScrollingEnabled(false);

가끔 유용하지만 항상 사용하지 않는 것이 좋습니다. 리 실러보기에서보기 재활용 기능을 비활성화하기 때문입니다.

대안 :

Try CollapsiveToolbarLayout with Recycler view. put other views in collapsiveTollbar layout.


You can use ScrollView with ExtendRecyclerView class that overrides the onMeasure method. That works for me!

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

I also met this problem. And upgrade to 26.1.0 fix it.


This is WAI. The NestedScrollView measures its children with the Spec "Unspecified". The child can grow as much as it wants too.

This essentially equates the height of NSV and RV. So as far as the RV is concerned, it believes that it is completely displayed.

Wrap your RV with an LL and give your RV a height. The LL would not set the measure spec to be UNSPECIFIED so the RV would correctly scroll within its set height of whatever DPs you provide.

The only downside of this method is that you will not be able to do a match parent on your RV.


You should wrap recycler view in any layout like LinearLayout and set RecyclerView size to constant, like 800dp. This will enable smooth scroll and recycler view will still recycler views during scroll.

<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>

참고URL : https://stackoverflow.com/questions/37301724/recyclerview-inside-nested-scrollview-scroll-but-does-not-fast-scroll-like-norma

반응형