当前位置: 首页 > 知识库问答 >
问题:

RecyclerView项目装饰分隔符切割我的子视图

谷梁裕
2023-03-14

我想得到下图所示的除法器:

我希望所有列的宽度相同,但行间距不同。现在我的第一列和最后一列被剪成这样:

以下是我的< code>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));
    }
}

我怎样才能解决这个问题?谢谢

共有1个答案

白侯林
2023-03-14

事实上,在<code>getItemOffsets</code>的<code>outRect</code>参数中设置的值占据了项的空间。

我实现了一个< code > SCommonItemDecoration 来解决这个问题。

请参考:ibosong/CommonItemDecoration

回答得晚,但可能对其他有相同要求的人有帮助。

 类似资料:
  • 下面是我如何为RecyclerView项目设置间距。它被设计用于网格和列表。间隔很有效。 我搞不懂的是如何插入分隔线。如有任何帮助,我们将不胜感激。 旁注:如果你有比我现在做的更好的方法来实现间距,我会非常感激:) 下面是我想要做的一个快速视觉效果: 以下是我所知道的: 这是我想要的:

  • 有没有办法防止分割器显示在最后一个项目之后?

  • 什么是最好的和最简单的方法来装饰回收器视图有这样的外观 这里的主要挑战是仅在项目之间使用分隔线,而不是在项目和屏幕的左/右边框之间划分。 有什么想法吗?

  • 我想显示一个项目列表,并使用“.” 我对此进行了研究,发现RecyclerView有一个内置的ItemDecoration功能。然而,我只能找到如何画一条线: 从我所看到的,您必须为此使用可绘制的,并且隐藏最后一个分隔符仍然不是很方便。 我发现的另一个选项是在RecyclerView的适配器内创建异构布局:https://guides.codepath.com/android/Heterogeno

  • 问题内容: 我有一个像这样的字符串: 我想拆分该字符串并选择作为分隔符。 我的代码如下所示: 我得到的是一个包含所有字符作为一个条目的数组: 有人知道为什么吗? 我不能用分割字符串吗? 问题答案: 在RegEx中被视为。因此,您需要对其进行转义:

  • 问题内容: 如何在定界符哪里分割此字符串 获得?的输出 问题答案: 你可以使用以下功能: