Разделитель RecyclerView ItemDecoration сокращает мои дочерние представления

Я хочу получить разделитель, как на картинке ниже:

что я хочу

Я хочу, чтобы все столбцы были одинаковой ширины, но с разным интервалом. Прямо сейчас мой первый столбец и последний столбец были вырезаны следующим образом:

что у меня есть сейчас

Вот мой ItemDecoration:

public class MoreIndexItemDividerDecoration extends RecyclerView.ItemDecoration {
    private GridLayoutManager mGridLayoutManager;
    private GridLayoutManager.SpanSizeLookup mSpanSizeLookup;
    private int mSpanCount;

    public MoreIndexItemDividerDecoration(GridLayoutManager manager, int spanCount) {
        mGridLayoutManager = manager;
        mSpanSizeLookup = mGridLayoutManager.getSpanSizeLookup();
        mSpanCount = spanCount;
    }

    @Override
    public void getItemOffsets(Rect outRect, View child, RecyclerView parent, RecyclerView.State state) {
        int pos = parent.getChildLayoutPosition(child);
        int left = 0;
        int top = 0;
        int right = 0;
        int bottom = 0;

        if (mGridLayoutManager.getItemViewType(child) == 1) {
            if (mSpanSizeLookup.getSpanIndex(pos, mSpanCount) == 0) {
                left = 50;
            } else {
                left = 5;
            }
            if (mSpanSizeLookup.getSpanIndex(pos, mSpanCount) == mSpanCount - 1) {
                right = 50;
            } else {
                right = 5;
            }
            top = 5;
            bottom = 5;
        } else {
            if (mSpanSizeLookup.getSpanGroupIndex(pos, 4) != 0) {
                top = 45;
            }
            bottom = 45;
        }

        outRect.set(left, top, right, bottom);
        HtscLog.e("child pos: " + pos + " span size: " + mSpanSizeLookup.getSpanSize(pos) + " group index: " + mSpanSizeLookup.getSpanGroupIndex(pos, 4) + " index: " + mSpanSizeLookup.getSpanIndex(pos, 4) + " view type: " + mGridLayoutManager.getItemViewType(child));
    }
}

Как я могу это исправить? Спасибо!


person 朱凌峰    schedule 02.06.2016    source источник


Ответы (1)


На самом деле, значения, установленные в параметре outRect getItemOffsets, занимают пространство элемента.

Я реализовал SCommonItemDecoration, который фактически решает эту проблему.

См.: ibosong/CommonItemDecoration.

Поздний ответ, но может быть полезен для других, у которых есть такое же требование.

person Bos    schedule 15.05.2017