본문 바로가기

프로그래밍/안드로이드

[안드로이드, Java] 리사이클뷰 아이템 마진 적용하기, RecyclerView Item Margin

728x90
반응형

제목 : 리사이클뷰 아이템 마진 적용하기, RecyclerView Item Margin

 


문제

프레그먼트에 리사이클뷰를 넣어서 리스트를 만들었는데 만들고 보니 아이템들이 따닥따닥 붙어있었다. 그래서 margin prams를 사용해서 했더니 안되어서 다른 방법을 찾아보다가 데코레이션을 써야한다고 한다

 


방법

데코레이션 클래스 만들기

 

Decoration 클래스를 하나 만든다. 이름은 아무렇게나 하면 된다

 

데코레이션 클래스 설정

 

새로 만든 클래스에 RecycleView.ItemDecoration을 extends하고 생성자로 Context context를 받아온다음

Ctr + O를 눌러 getItemOffsets를 생성한다

그리고 아래 코드 처럼 작성하면 위 사진처럼 margin이 적용된 것 처럼 쓸 수 있다

 

package com.zynar.starvoca.recyclerview;

import android.content.Context;
import android.graphics.Rect;
import android.view.View;

import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;

import com.zynar.starvoca.R;

public class PostItemDecoration extends RecyclerView.ItemDecoration {

    private int size;

    public PostItemDecoration(Context context) {
        this.size = context.getResources().getDimensionPixelSize(R.dimen.words_margin);
    }

    @Override
    public void getItemOffsets(@NonNull Rect outRect, @NonNull View view, @NonNull RecyclerView parent, @NonNull RecyclerView.State state) {
        super.getItemOffsets(outRect, view, parent, state);
        outRect.bottom = size;
        outRect.top = size;
    }
}

 

생성자로 context를 받아온 이유는 프레그먼트의 requreContext()를 받아서 픽셀을 구하는 함수를 사용해야한다 getResources().getDimensionPixelSize() 사용하기 위함이다. 이것은 나중에 여백의 간격이 된다

 

getItemOffsets의 인자들은 나도 잘 모른다 그냥 ctr + o하니까 자동으로 생성된거다

outRect의 top과 bottom을 size로 넣어주면 여백이 만들어진다

 

리사이클뷰 적용하기

그리고 리사이클뷰를 어댑터와 적용하는 코드로 가서 setAdapter() 전에 해당 데코레이션을 적용시켜주면된다

 

PostItemDecoration decoration = new PostItemDecoration(requireContext());
rvList.addItemDecoration(decoration);

 


참고 링크

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

 

RecyclerView.ItemDecoration  |  Android Developers

androidx.car.app.managers

developer.android.com

https://youtu.be/AtzJUDvRktI


 

728x90
반응형