android RecyclerView 简单粗暴设置GridLayoutManager item之间的间距

最近做一个购买会员功能,其中有个RecyclenView 的选择列表,需要实现横向列表,跟九宫格类似的功能。如下图,

其中选择Recyclenview选中变高亮,分分四格就需要给recyclenview 的GridLayoutManager 画分割线,直接画是画不出竖线的,网上看了都说单独处理。然后无意在网上看到一个直接在item中添加一个外层来实现,非常巧妙。

原文

这里是GridLayoutManager或者StaggeredGridLayoutManager 设置Item间距的办法。

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">

    <data>

        <variable
            name="position"
            type="int" />

        <variable
            name="listener"
            type="com.xxx.listenter.OnRecyclerviewItemClickListener" />

        <variable
            name="buyvip"
            type="com.xxx.response.BuyVipResponse.DataBean.ListBean" />
    </data>

    <!--外层item边距-->
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@color/lucency_3"
        android:onClick="@{(thenView) ->listener.onItemClickListener(thenView, position)}"
        android:orientation="vertical"
        android:padding="5dp">
        <!--外层item边框-->
        <LinearLayout
            android:id="@+id/vip_item"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@drawable/vip_style"
            android:orientation="vertical">


            <TextView
                android:id="@+id/tv_class"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:layout_marginTop="10dp"
                android:gravity="center"
                android:text="会员"
                android:textColor="@color/randking_top" />

            <LinearLayout
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:layout_marginTop="5dp"
                android:gravity="center"
                android:orientation="horizontal">

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="bottom"
                    android:layout_marginLeft="5dp"
                    android:layout_marginRight="3dp"
                    android:gravity="bottom"
                    android:text="¥"
                    android:textColor="@color/randking_top" />

                <TextView
                    android:id="@+id/tv_vip_money"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center"
                    android:gravity="center"
                    android:text="99"
                    android:textColor="@color/randking_top"
                    android:textSize="20sp" />

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="bottom"
                    android:layout_marginLeft="5dp"
                    android:gravity="bottom"
                    android:text="元"
                    android:textColor="@color/randking_top" />

                <com.gwkj.qixiubaodian.utils.DrawLineTextView
                    android:id="@+id/tv_discount"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="bottom"
                    android:layout_marginLeft="5dp"
                    android:gravity="bottom"
                    android:text="20"
                    android:textColor="@color/gray_99" />

            </LinearLayout>


            <TextView
                android:id="@+id/vip_time"
                style="@style/help_layout"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:layout_marginBottom="10dp"
                android:layout_marginLeft="5dp"
                android:layout_marginRight="5dp"
                android:layout_marginTop="5dp"
                android:ellipsize="end"
                android:gravity="center"
                android:lines="1"
                android:text="7" />

        </LinearLayout>

    </LinearLayout>

</layout>

里面这个RelativeLayout就是你的item正常的布局,而LinearLayout 这个根部局我设置了他的背景色为透明的,再加一个padding就行了,这个padding就是设置item的间距,这样设置item的间距了。

所以说RecyclerView的Item的间距都可以通过item里面设置padding,margin来解决,这种办法相对巧妙。

然后在调用的地方,

int spanCount = 3; // 3 columns
        int spacing = 50; // 50px
        boolean includeEdge = false;
        mRecyclerView.addItemDecoration(new GridSpacingItemDecoration(spanCount, spacing, includeEdge));

如果你了别人的RecycleView 上拉加载下拉刷新,addItemDecoration 这个方法 不一定会给你加上,你可以在源码上自行添加。

public void addItemDecoration(RecyclerView.ItemDecoration decor) {
    mRecyclerView.addItemDecoration(decor,-1);
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值