如何将 RecyclerView Grid Layout Items 与固定列数对齐到左侧?

问题描述

我有一个带有网格布局的回收视图,我想在其中将项目与固定列数的左侧对齐。

目前,recyclerview 网格布局将宽度划分为多个项目并将它们放置在相等的边距中。

这是我的代码

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/ll_grid_item"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@drawable/ripple_background"
    android:clickable="true"
    android:layout_marginStart="@dimen/grid_2"
    android:layout_marginLeft="@dimen/grid_2"
    android:padding="@dimen/layout_margin_5dp"
    android:layout_marginTop="@dimen/layout_margin_param_1" >

    <com.carwale.carwale.ui.widgets.CarwaleTextView
        android:id="@+id/tv"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/iv_grid_item_image"
        android:layout_centerHorizontal="true"
        android:gravity="center"
        android:textColor="@color/warm_grey"
        android:ellipsize="end"
        android:textSize="@dimen/font_h4"
        android:visibility="gone"
        android:singleLine="true" />
</RelativeLayout>

RecyclerView recyclerGridLayout = new RecyclerView(mContext);
RecyclerView.LayoutParams params = new RecyclerView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,ViewGroup.LayoutParams.WRAP_CONTENT);
recyclerGridLayout.setHasFixedSize(true);
int spanCount = 4; // 3 columns
int rowSpacing = getResources().getDimensionPixelSize(20);
int columnSpacing = getResources().getDimensionPixelSize(6);
recyclerGridLayout.addItemdecoration(new GridSpacingItemdecoration(spanCount,rowSpacing,columnSpacing));

recyclerGridLayout.setnestedScrollingEnabled(false);
recyclerGridLayout.setLayoutManager(new GridLayoutManager(mContext,spanCount));
GridLayoutAdapter gridLayoutAdapter = new GridLayoutAdapter(mContext);
recyclerGridLayout.setAdapter(gridLayoutAdapter);
@Override
    public void getItemOffsets(@NonNull Rect outRect,@NonNull View view,@NonNull RecyclerView parent,@NonNull RecyclerView.State state) {
        int position = parent.getChildAdapterPosition(view); // item position
        int column = position % spanCount; // item columngrid
        outRect.left = column * columnSpacing / spanCount; // column * ((1f / spanCount) * rowSpacing)
        outRect.right = columnSpacing - (column + 1) * columnSpacing / spanCount; // rowSpacing - (column + 1) * ((1f /    spanCount) * rowSpacing)
        if (position >= spanCount) {
            outRect.top = rowSpacing; // item top
        }
    }

当前结果:

list of items in grid layout

预期结果:

list of items in grid layout the result I want

解决方法

每次用户点击Item时,根据用户点击的顺序修改RecyclerView数据集数组并调用RecyclerViewadapter.notifyDatasetchanged()