大家在刚接触Android的时候,ListView肯定是第一个接触到的、也是比较常用的一个比较“高级”一点的控件,说它高级,主要是它在使用的时候比TextView、ImageView等基础控件要复杂一点。
当我们兴致勃勃的学习了ListView和Adapter直接的关系绑定,并且把列表展示出来了之后,遇到一个说起来很简单的一个问题,列表怎么添加分割线?
1、item view里添加分割线
最直接最简单粗暴的方法就是在item view里自己添加分割线。自己想怎么设置都可以。缺点是实现起来不够优雅,当app里有多个列表(使用同样style)展示的时候,不能够复用。
2、设置Divider
其实listview本来就有设置分割线的功能,可以在listview中添加divider属性:
<item name="android:headerDividersEnabled">false</item>
<item name="android:footerDividersEnabled">false</item>
<item name="android:dividerHeight">1dp</item>
可以自己设置分割线的高度、颜色,列表头尾是否显示分割线等。
3、Divider的高级扩展
本来分割线就是一个很简单的功能,listview也提供了完备的支持,讲完第二点就OK了,但是如果你遇到了这样一个需求——分割线带边距!不是简单的设置list的padding,是分割线和整个item的边距都不一样,如图:
那你要怎么做呢?
如果通过第一种方法在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的需求。
如果你觉得文章对你有用,请赞我;如果有任何问题,欢迎留言交流。