您当前的位置:首页 > 计算机 > 编程开发 > 安卓(android)开发

为什么ListView的顶部和底部没有分隔线

时间:02-04来源:作者:点击数:

定义了一个ListView如下:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center" >
    
    <ListView
	    android:id="@+id/listView"
	    android:layout_height="wrap_content"
	    android:layout_width="match_parent" />

</LinearLayout>

此布局为在页面的居中位置显示一个ListView,假如给这个ListView填充3条数据,效果图为:

此时可看到ListView居中显示,在ListView的顶部和底部没有显示分隔线,如果项目需求中需要显示这两条线怎么办?我百度的时候发现千篇一律的都是一个说法,说ListView的高度要设置为match_parent,还有要设置:android:headerDividersEnabled="true"、android:footerDividersEnabled="true"。这个答案实在是太差,因为有的时候ListView的高度就是需要设置为wrap_content。

其实这个解答,只要我们在写代码的时候认真的去看一下SDK的文档说明即可知道如何解决,如在android:headerDividersEnabled

="true"这个属性,很明显说的是允许叶眉的分隔线,有的人说设置了这个为true也没起作用,其实是没有看到这个属性的说明,我们在xml布局中输入这个属性的时候会有代码提示,这个时候可以选择设置哪个属性,并且有这个属性的相关说明,截图如下:

如上图,对android:footerDividersEnabled 属性的说明为“When set to false, the ListView will not draw the divider before

each footer view. [boolean]",英文不好的拿有道词典来翻译一下就能理解,大概意思为“当设置为false的时候,这个ListView将不画footer view之前的分隔线”,就此想要显示footer view之前的分隔线,那么这个属性要设置为true,但是设置为true并运行的时候发现并没有显示出footer view之前的分隔线,为什么?这是因为我们没有理解好属性的说明,人家说的是footer view之前,而我们现在的ListView有footer view吗?没有,所以问题就出在这里了,你把footer view加上即可,如果说你的ListView确实不需要header view和footer view,但是又需要显示出ListView顶部和底部的分隔线应该怎么办?So easy!我们给它设置一个空的view即可,如下:

listView.addHeaderView(new View(this));
listView.addFooterView(new View(this));

再次运行,结果如下:

注:这是把ListView的第1条数据的顶部和最后一条数据的底部的分隔线显示出来,并不是说是ListView的顶部和底部的分隔线,因为ListView的高有可能是100dp,但是它里面有1万条数据。

经过实验,我发现android:headerDividersEnabled、android:footerDividersEnabled这两个属性默认就是为true的,因此就不需要在xml中设置这两个属性了,多此一举。那这两个属性什么时候需要设置?当你的ListView有header view或footer view的时候,并且你不想显示顶部或底部的分隔线的时候,就需要设置对应的属性为false。

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门