Moments of growth

[Kotlin] ScrollView 안에 RecyclerView 만드는 방법 본문

Android [Kotlin] 💻🤍

[Kotlin] ScrollView 안에 RecyclerView 만드는 방법

뮤링이 2021. 11. 19. 22:52

📌ScrollView: 위젯이나 레이아웃이 화면에 넘칠 때 사용함

    ✔ default로 수직으로 스크롤 가능

    ✔ ScrollView 안에는 단 하나의 위젯만 넣을 수 있다

 

    ✔ ScrollView 안에 RecyclerView를 사용할 경우 이중 스크롤 현상이 나타나서 제대로 기능이 구현되지 않을 수 있다

ScrollView 안에 RecyclerView를 넣은 경우 위와 같이 이중 스크롤이 된다 

 

    ✔ 이 현상을 막기 위해서 NestedScrollView를 사용한다 ❗

 

 

📌NestedScrollView: View들이 함께 스크롤된다

    ✔ 스크롤뷰는 스크롤뷰대로 움직이고, 그 안에 있는 RecyclerView는 RecyclerView대로 움직이는 것을 막기 위해서 ScrollView 대신 NestedScrollView를 쓴다

    ✔ 역시 내부에 ViewGroup을 하나만 가질 수 있다

    ✔ 주의할 점은 RecyclerView 속성에 android:nestedScrollingEnabled="false" 를 해줘야한다

    ✔ 하지만 NestedScrollView 안에 RecyclerView를 사용한다면 RecyclerView는 아이템을 미리 생성해서 뷰를 재사용하지 못한다 ➡ 뷰를 재사용해서 메모리 효율을 높일 수 있다는 장점이 사라지게 된다⚠

 

📌fragment_inhome.xml

<androidx.core.widget.NestedScrollView //ScrollView 대신 NestedScrollView 적용
    android:id="@+id/scrollview"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent">

    <androidx.constraintlayout.widget.ConstraintLayout
        android:id="@+id/view"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        ...
        
        <androidx.recyclerview.widget.RecyclerView
            android:id="@+id/rv_now"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_marginStart="18dp"
            android:layout_marginTop="16dp"
            android:layout_marginEnd="18dp"
            android:nestedScrollingEnabled="false" //꼭 설정해주기
            app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/tv_now"
            tools:itemCount="7"
            tools:listitem="@layout/item_now_list">
        </androidx.recyclerview.widget.RecyclerView>
            
        ...
            
    </androidx.constraintlayout.widget.ConstraintLayout>
        
</androidx.core.widget.NestedScrollView>

 

 

 

[참고 블로그] https://velog.io/@kimbsu00/Android-7

 

[Android] NestedScrollView에 대해 알아보자!

RecyclerView와 ScrollView를 함께 사용하고 싶은 당신! NestedScrollView를 사용하는 것을 추천합니다.

velog.io

 

Comments