이 영역을 누르면 첫 페이지로 이동
CodeJUN 블로그의 첫 페이지로 이동

CodeJUN

페이지 맨 위로 올라가기

CodeJUN

심심해서 하는 블로그

RecyclerView 에서 Divider (구분선) 추가하기

  • 2019.08.24 16:04
  • Android

코틀린 버전 보러가기 (클릭)

 

ListView에서는(나 때는 말이야) xml상에서 item들 사이의 간격이나, divider에 관한 정보를 설정할 수 있었는데, RecyclerView에서는 이러한 옵션이 없습니다. 사실 최근 구글 앱들을 살펴보면, Divider가 있는 디자인이 없긴 합니다. 그래서 뺀 건가..

 

그래도 굳이 넣어야 하겠다면, 아래 과정을 잘 따라와 주시기 바랍니다.

 

Divider로 쓰일 Drawable xml 만들기

하아 사실 정말 귀찮지만, Divider를 넣기 위해서 어쩔 수 없답니다. line_divider.xml을 만들어 divider로 쓰이게 될 xml파일을 생성해 줍니다.

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">

    <size
        android:width="1dp"
        android:height="1dp" />

    <solid android:color="#ededed" />

</shape>

 

Custom ItemDecoration 만들기

RecyclerView에서는 ItemDecoration이라고 해서, 말 그대로 리스트 항목에서 item들에 대한 옵션을 넣어줄 수 있습니다. 우리는 이 부분을 커스텀하여, item사이에 구분선(divider)을 넣어주도록 하겠습니다.

먼저, DividerItemDecoration 이라는 클래스를 생성하겠습니다.

public class DividerItemDecoration extends RecyclerView.ItemDecoration {

    private static final int[] ATTRS = new int[]{android.R.attr.listDivider};

    private Drawable divider;

    /**
     * Default divider will be used
     */
    public DividerItemDecoration(Context context) {
        final TypedArray styledAttributes = context.obtainStyledAttributes(ATTRS);
        divider = styledAttributes.getDrawable(0);
        styledAttributes.recycle();
    }

    /**
     * Custom divider will be used
     */
    public DividerItemDecoration(Context context, int resId) {
        divider = ContextCompat.getDrawable(context, resId);
    }

    @Override
    public void onDraw(Canvas c, RecyclerView parent, RecyclerView.State state) {
        int left = parent.getPaddingLeft();
        int right = parent.getWidth() - parent.getPaddingRight();

        int childCount = parent.getChildCount();
        for (int i = 0; i < childCount; i++) {
            View child = parent.getChildAt(i);

            RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child.getLayoutParams();

            int top = child.getBottom() + params.bottomMargin;
            int bottom = top + divider.getIntrinsicHeight();

            divider.setBounds(left, top, right, bottom);
            divider.draw(c);
        }
    }
}

 

그 다음, 그냥 RecyclerView에서 ItemDecoration을 해당 클래스만 지정해 주시면 끝납니다.

recyclerView.addItemDecoration(
                new DividerItemDecoration(getContext(), R.drawable.line_divider));

 


RecyclerView가 정말 편하긴 합니다만,, 손이 많이 가는 친구네요.

저작자표시 비영리 동일조건 (새창열림)

'Android' 카테고리의 다른 글

zxing 라이브러리로 QR코드 생성  (0) 2019.11.07
Lottie 를 이용해 화려한 애니메이션 넣기  (0) 2019.09.20
Preference View(설정창 구현하기)  (0) 2019.07.18
ViewPager 사용 시 양쪽 뷰 미리보기  (4) 2019.06.06
[News] 안드로이드, 64비트 지원 '필수'  (0) 2019.01.21

댓글

이 글 공유하기

  • 구독하기

    구독하기

  • 카카오톡

    카카오톡

  • 라인

    라인

  • 트위터

    트위터

  • Facebook

    Facebook

  • 카카오스토리

    카카오스토리

  • 밴드

    밴드

  • 네이버 블로그

    네이버 블로그

  • Pocket

    Pocket

  • Evernote

    Evernote

다른 글

  • zxing 라이브러리로 QR코드 생성

    zxing 라이브러리로 QR코드 생성

    2019.11.07
  • Lottie 를 이용해 화려한 애니메이션 넣기

    Lottie 를 이용해 화려한 애니메이션 넣기

    2019.09.20
  • Preference View(설정창 구현하기)

    Preference View(설정창 구현하기)

    2019.07.18
  • ViewPager 사용 시 양쪽 뷰 미리보기

    ViewPager 사용 시 양쪽 뷰 미리보기

    2019.06.06
다른 글 더 둘러보기

정보

CodeJUN 블로그의 첫 페이지로 이동

CodeJUN

  • CodeJUN의 첫 페이지로 이동

검색

메뉴

  • 홈
  • 방명록

카테고리

  • 분류 전체보기 (54)
    • Android (38)
    • BlockChain (4)
    • React Native (4)
    • 아두이노 (2)
    • 프로젝트 (6)

공지사항

  • 공지 - 블로그를 시작하며

태그

  • 강좌
  • Firebase
  • C
  • 아두이노
  • Android
  • 안드로이드
  • c++
  • arduino

나의 외부 링크

  • Github

정보

CODE_JUN의 CodeJUN

CodeJUN

CODE_JUN

블로그 구독하기

  • 구독하기
  • RSS 피드

방문자

  • 전체 방문자
  • 오늘
  • 어제

티스토리

  • 티스토리 홈
  • 이 블로그 관리하기
  • 글쓰기
Powered by Tistory / Kakao. © CODE_JUN. Designed by Fraccino.

티스토리툴바