关于ListView设置分割线的那点事

大家在刚接触Android的时候,ListView肯定是第一个接触到的、也是比较常用的一个比较“高级”一点的控件,说它高级,主要是它在使用的时候比TextView、ImageView等基础控件要复杂一点。
当我们兴致勃勃的学习了ListView和Adapter直接的关系绑定,并且把列表展示出来了之后,遇到一个说起来很简单的一个问题,列表怎么添加分割线?

1、item view里添加分割线

最直接最简单粗暴的方法就是在item view里自己添加分割线。自己想怎么设置都可以。缺点是实现起来不够优雅,当app里有多个列表(使用同样style)展示的时候,不能够复用。

2、设置Divider

其实listview本来就有设置分割线的功能,可以在listview中添加divider属性:

<item name="android:headerDividersEnabled">falseitem>
    <item name="android:footerDividersEnabled">falseitem>
        <item name="android:dividerHeight">1dpitem>

可以自己设置分割线的高度、颜色,列表头尾是否显示分割线等。

3、Divider的高级扩展

本来分割线就是一个很简单的功能,listview也提供了完备的支持,讲完第二点就OK了,但是如果你遇到了这样一个需求——分割线带边距!不是简单的设置list的padding,是分割线和整个item的边距都不一样,如图:
关于ListView设置分割线的那点事_第1张图片
那你要怎么做呢?
如果通过第一种方法在item view里设置分割线肯定是可以的,但是能不能通过divider来优雅的实现呢?答案是肯定的!
主要方法是设置一个divider的drawable,然后设置divider为此drawable,那么关键就是这个drawable怎么写了?直接上代码

<inset xmlns:android="http://schemas.android.com/apk/res/android"
       android:insetLeft="60dp">
    <shape android:shape="rectangle" >
        <solid android:color="@color/color_background" />
    shape>
inset>

这里主要用到了嵌入图像InsetDrawable的用法。它可以在背景图上嵌入一些资源,同时可以设置边距。

<inset
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:drawable="@drawable/drawable_resource"
    android:insetTop="dimension"
    android:insetRight="dimension"
    android:insetBottom="dimension"
    android:insetLeft="dimension" />

元素解释:
android:insetTop:图像距离上边的距离。
android:insetRight:图像距离右侧的距离。
android:insetBottom:图像距离底边的距离。
android:insetLeft:图像距离左侧的距离。

到这里完美解决了带边距divider的需求。

如果你觉得文章对你有用,请赞我;如果有任何问题,欢迎留言交流。

你可能感兴趣的:(Android)