在GridLayoutManager中划分两列之间的宽度

问题描述 投票:1回答:4

我使用GridLayoutManager作为recyclerview的布局管理器。

  mRecyclerView.setLayoutManager(new GridLayoutManager(getContext(), 2));

结果如下:enter image description here

但我想平均分配两列之间的宽度。我怎样才能做到这一点?

android android-layout android-recyclerview gridlayoutmanager
4个回答
1
投票

尝试在你的recyclerView上添加:

mRecyclerView.addItemDecoration(new RecyclerView.ItemDecoration() {
        @Override
        public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
            int position = parent.getChildAdapterPosition(view); // item position
            int spanCount = 2;
            int spacing = 10;//spacing between views in grid

            if (position >= 0) {
                int column = position % spanCount; // item column

                outRect.left = spacing - column * spacing / spanCount; // spacing - column * ((1f / spanCount) * spacing)
                outRect.right = (column + 1) * spacing / spanCount; // (column + 1) * ((1f / spanCount) * spacing)

                if (position < spanCount) { // top edge
                    outRect.top = spacing;
                }
                outRect.bottom = spacing; // item bottom
            } else {
                outRect.left = 0;
                outRect.right = 0;
                outRect.top = 0;
                outRect.bottom = 0;
            }
        }
    });

0
投票

您可以使用自定义ItemDecoration,您可以根据需要拆分空间:

SpacesItemDecoration可以帮助您:

public class SpacesItemDecoration extends RecyclerView.ItemDecoration {
    private int space;

    public SpacesItemDecoration(int space) {
        this.space = space;
    }

    @Override
    public void getItemOffsets(Rect outRect, View view,
                               RecyclerView parent, RecyclerView.State state) {

        outRect.bottom = space;

        // Add top margin only for the first item to avoid double space between items
        if (parent.getChildLayoutPosition(view)%2 == 0) {
            outRect.left = space;
            outRect.right = space;
        } else {
            outRect.right = space;
        }
    }
}

在您的活动或片段中:

int spacingInPixels = getResources().getDimensionPixelSize(R.dimen.spacing);
        spacesItemDecoration = new SpacesItemDecoration(spacingInPixels);

      recyclerview.addItemDecoration(spacesItemDecoration);

您可以根据需要更改outRect.left和outRect.Right


0
投票

你可以使用ItemDecoration为此目的,看看here

并且有一些非常好的答案here also


0
投票

像下一样设置列数:

mRecyclerView.setLayoutManager(new GridLayoutManager(getContext(), 2));

...实际上使网格分成相同宽度的列。

这表明问题出在其他地方,可能是在项目布局中。我想一些空格(填充/边距)是项目向右移动的原因。尝试删除这些间距并检查它是否有效。

如果有帮助,您可以随时使用ItemDecoration添加新的间距,但这不是列的大小不正确的原因。

我认为打开Show Layout Bounds option可能对你有所帮助。

© www.soinside.com 2019 - 2024. All rights reserved.