微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决如何将 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()

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。