GridView实现类似listview中divider分割线

今天遇到一个需求,那就是GridView要以PopupWindow的方式展示数据,并且需要给gridview添加分割线。

我们知道GridView是没有想ListView那样的divider分割线的,所以我们需要自己画分割线。

一般来说我们是使用让背景色透出来形成分割线或者给每一项Item描边的方式产生分割线,当然,这在数据刚好填完整的时候是很好用的。

比如说,在这种情况下,看起来会很完美(我现在给的边是4dp,为了看起来更直观,现实中可能用不到这么大的边,为了更标准,我GridView本身再padding了4dp,所以现在的每条边有8dp,):


但是,在数据填不满的情况下,就会出现这样的问题。


或者我不要GridView的描边,那么现实是这样的。


会很明显的看出来,总会有一些边要比中间的边要细一半。总是达不到我要的效果。我需要图三那样的效果(没有Item的地方现实底部的视图),但是又想要每条边都一样粗细。

会出现中间的部分线条会比边沿的部分线条宽。那是因为中间的线条是上下两个item或者左右两个item的边拼起来的,也就是有8dp那么宽,那么我们怎么让它变成4dp呢?

现在说一下我的实现方式,灵感来源于http://stackoverflow.com/questions/7132030/android-gridview-draw-dividers

在里面的第一条回复中,我看到参数能够输入负数,也就是会隐藏一部分,下面来做一下实验。

第一步,同样的,我使每一项item四边都有一条深色的边显示出来。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#494b4e"
    android:padding="4dp"
    android:gravity="center_horizontal"
    android:orientation="vertical" >


    <TextView
        android:id="@+id/tv_job"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="#696c71"
        android:paddingBottom="@dimen/dim35"
        android:gravity="center"
        android:paddingTop="@dimen/dim35"
        android:singleLine="true"
        android:textColor="@color/white"
        android:textSize="@dimen/txt32" />


</LinearLayout>

第二部,我想办法把拼接的边从两倍宽变成一倍宽。有两个属性是很好用的,那就是android:horizontalSpacing(水平边距)和android:verticalSpacing(垂直边距);

既然这两个属性能设置0包括0以上的dp值,为什么我不能设置0一下的dp值呢。

我试了一下(使用8dp,是效果更明显),发现可行,并且很明显的可以看出来,下边的item会覆盖住上边的item的一部分,左右的item会覆盖左边的item的一部分。



<GridView
                    android:id="@+id/gv_second"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:horizontalSpacing="-8dp"
                    android:numColumns="3"
                    android:scrollbars="none"
                    android:verticalSpacing="-8dp" />


那么,我让他刚好覆盖掉上一个item的边和左右的item的边会是什么效果呢?发现结果是很漂亮的。

 <GridView
                    android:id="@+id/gv_second"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:horizontalSpacing="-4dp"
                    android:numColumns="3"
                    android:scrollbars="none"
                    android:verticalSpacing="-4dp" />



<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#494b4e"
    android:padding="4dp"
    android:gravity="center_horizontal"
    android:orientation="vertical" >


    <TextView
        android:id="@+id/tv_job"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="#696c71"
        android:paddingBottom="@dimen/dim35"
        android:gravity="center"
        android:paddingTop="@dimen/dim35"
        android:singleLine="true"
        android:textColor="@color/white"
        android:textSize="@dimen/txt32" />


</LinearLayout>









  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值