본문 바로가기
android

RecyclerView 일정하게 여백 설정

by arirang_ 2023. 10. 6.

문제

RecyclerView Grid 형태로 2줄 만들 때 한쪽으로 치우침

- 좌,우, 상, 하 일정한 여백을 주어 아이템들을 중앙에 배치하고 싶다.


해결

1. layout_xml에 RecyclerView 추가

<androidx.recyclerview.widget.RecyclerView
        android:id="@+id/recyclerView"
        android:layout_width="0sp"
        android:layout_height="0sp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/app_bar"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layoutManager="androidx.recyclerview.widget.GridLayoutManager"
        app:spanCount="2"
        android:layout_marginStart="10sp"
        android:layout_marginEnd="10sp"
        android:layout_marginBottom="70sp" />

 

2. GridSpaceItemDecoration 클래스 만들기

 

GridSpaceItemDecoration.kt

class GridSpaceItemDecoration(val spanCount: Int, val space: Int): RecyclerView.ItemDecoration() {

    override fun getItemOffsets(
        outRect: Rect,
        view: View,
        parent: RecyclerView,
        state: RecyclerView.State
    ) {
        val position = parent.getChildAdapterPosition(view)
        val column = position % spanCount + 1      // 1부터 시작

        /** 첫번째 행(row-1)에 있는 아이템인 경우 상단에 [space] 만큼의 여백을 추가한다 */
        if (position < spanCount){
            outRect.top = space
        }
        /** 마지막 열(column-N)에 있는 아이템인 경우 우측에 [space] 만큼의 여백을 추가한다 */
        if (column == spanCount){
            outRect.right = space
        }
        /** 모든 아이템의 좌측과 하단에 [space] 만큼의 여백을 추가한다. */
        outRect.left = space
        outRect.bottom = space
    }
}

 

3. RecyclerView를 사용하는 Activity에 다음 함수 추가하기

fun initRecyclerView(){
        val adapter=LikedFoodAdapter() //어댑터 객체 만듦
        adapter.datalist=mDatas //데이터 넣어줌

        viewBinding.recyclerView.adapter = adapter
        viewBinding.recyclerView.run {               //**이 부분**
            val spanCount = 2
            val space = 20
            addItemDecoration(GridSpaceItemDecoration(spanCount, space))
        }
    }

완성


참고 링크

[Android] RecyclerView 아이템 여백 설정 (tistory.com)