RecyclearView에서 줄 사이에 구분선 표시

8465 단어 Android
안녕하세요.
@wasabeef_jp
참조: http://wasabeef.jp/recyclerview-itemdecoration/
최근 몇 년 동안ListView2라고 불리는 RecyclearView를 사용하는 경우가 증가했다
ListView에서 다음과 같이 ListView의 xml 구분선(divider)을 정의합니다.
설정이 쉬울 것 같아요.
android:divider="#000000"
android:dividerHeight="2sp"
RecyclearView에서 xml로 정의된 것이 아닙니다
자바에 설정이 필요하니까 그 간단한 tips를 소개해 드릴게요.
RecyclearView를 직접 사용하면 다음 구분선이 없는 목록이 됩니다

그래서 RecyclearView가 등장했습니다.Item Decoration입니다.
RecyclerView.ItemDecoration에서 자체 제작한 범주를 정의합니다.
온드라우에서 디바이더를 그려주면 예쁘게 나와요.
public class DividerItemDecoration extends RecyclerView.ItemDecoration {

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

    private Drawable mDivider;

    public DividerItemDecoration(Context context) {
        final TypedArray a = context.obtainStyledAttributes(ATTRS);
        mDivider = a.getDrawable(0);
        a.recycle();
    }

    @Override
    public void onDraw(Canvas c, RecyclerView parent, RecyclerView.State state) {
        drawVertical(c, parent);
    }

    public void drawVertical(Canvas c, RecyclerView parent) {
        final int left = parent.getPaddingLeft();
        final int right = parent.getWidth() - parent.getPaddingRight();

        final int childCount = parent.getChildCount();
        for (int i = 0; i < childCount; i++) {
            final View child = parent.getChildAt(i);
            final RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child
                    .getLayoutParams();
            final int top = child.getBottom() + params.bottomMargin;
            final int bottom = top + mDivider.getIntrinsicHeight();
            mDivider.setBounds(left, top, right, bottom);
            mDivider.draw(c);
        }
    }

    @Override
    public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
        outRect.set(0, 0, 0, mDivider.getIntrinsicHeight());
    }
}
addItem Decoration으로 추가 정의된 사용자 정의 클래스를 사용한다면language-java
mRecyclerView.addItemDecoration(new DividerItemDecoration(context));
이런 느낌으로.

잡감


간단한 Divider를 표시하면 ListView보다 더 번거로움
홀수 짝수로 디바이더의 표현을 바꾸면서 점선을 추가한 디바이더 등의 자유도가 높아졌다.

좋은 웹페이지 즐겨찾기