본문 바로가기
안드로이드 자바

[Java][Android] ItemDecoration으로 RecyclerView의 여백 설정하기

by teamnova 2022. 11. 26.
728x90

안녕하세요!

오늘은 ItemDecoration을 이용해 RecyclerView의 여백 설정하는 방법을 알아보겠습니다.

 

itemDecoration 이란, RecyclerView를 이용하면서 유용하게 사용할 수 있는 구성요소입니다. itemDecoration를 잘 이용한다면 리스트의 항목들을 다양하게 꾸밀 수 있습니다.

itemDecoration에 대한 공식문서 입니다.

https://developer.android.com/reference/androidx/recyclerview/widget/RecyclerView.ItemDecoration

 

 

itemDecoration에서는 3가지 함수를 제공하는데 필요할때 각 함수를 재정의하여 사용할 수 있습니다.

  • onDraw: 항목을 배치하기 전에 호출
  • onDrawOver: 모든 항목이 배치된 후에 호출됩니다.
  • getItemOffsets: 각 항목을 배치할 때 호출.

 

 

이중에서 getItemOffsets 사용법을 알아보겠습니다. 아래 코드를 이용해 리사이클러뷰의 리스트들에 여백을 줄 수 있습니다.

public class MyItemDecoration extends RecyclerView.ItemDecoration {

    private Context context;

    MyItemDecoration(Context context) {
        this.context = context;
    }

    //각 항목을 배치할 때 호출된다
    //Rect - 항목을 구성하기 위한 사각형 정보가 호출
    //view - 항목을 구성하기 위한 view 호출
    @Override
    public void getItemOffsets(@NonNull Rect outRect, @NonNull View view,
                               @NonNull RecyclerView parent, @NonNull RecyclerView.State state) {
        super.getItemOffsets(outRect, view, parent, state);

        //항목의 index값 획득
        int index = parent.getChildAdapterPosition(view)+1;

        //인덱스가 3으로 나누어 떨어지는 경우, 즉 항목3개 마다 세로방향 여백을 60을 준다
        outRect.set(20, 20, 20, 20 );

        //배경색을 지정함
        view.setBackgroundColor(context.getResources().getColor(R.color.gray_light));

        //전달되는 데이터 타입별로 떠있는 효과를 다르게 줌
        ViewCompat.setElevation(view, 20.0f); //떠있는 효과를 준다

    }
}

 

ItemDecoration을 recyclerVIew에 적용하는 방법은 아래와 같습니다.

//리사이클러뷰에 ItemDecoration 적용
rv_menu.addItemDecoration(new MyItemDecoration(ItemActivity.this));

 

 

참고

  • 깡샘의 안드로이드 프로그래밍 (저자-강성윤)