ListView默认的分割线

ListView会在item之间添加一个默认的分割线。在XML中添加一个ListView,其对应的属性如下。

可以看到ListView默认样式中设置了一个Divider,使用的当前主题中的listDivider配置的Drawable对象来作为分割线。

查看Android SDK中data\res\values目录中的themesXXX.xml,可以找到六个不同Theme下的listDivider配置。分列如下。

文件名

主题名

listDivider配置

themes.xml

Theme

@drawable/divider_horizontal_dark

themes.xml

Theme.Light

@drawable/divider_horizontal_bright

themes_holo.xml

Theme.Holo

@drawable/list_divider_holo_dark

themes_holo.xml

Theme.Holo.Light

@drawable/list_divider_holo_light

themes_material.xml

Theme.Material

@drawable/list_divider_material

themes_material.xml

Theme.Material.Light

@drawable/list_divider_material

这六个listDivider配置对应五个文件,这五个文件都可以在data\res\values\drawableXXX目录中找到。其中list_divider_material对应一个xml文件,其他四个文件都是.9的png图片。

尽管Android为不同主题下的ListView提供了默认的分割线,通常在还是需要为ListView自定义分割线。

为何要自定义分割线

应用UI配色需要

当应用使用的主题确定时,分割线对应的颜色也就确定了。例如在Theme.Light主题下,分割线通常是一个颜色为灰色,高度为1dp的线。如果应用希望分割线显示的更明显或者更不明显,或者是应用需要使用更加个性化的分割线,又或许是应用修改了默认的ListView的背景颜色,需要让分割线和背景色更加搭配等等,很多情况下都需要对ListView分割线进行自定义。

统一不同主题下的显示效果

前面看到Android为不同主题下的ListView提供了不同的默认分割线,这在app开发时很方便,但是对第三方SDK开发来说是却是个缺点。因为主题是在app开发时在AndroidManifest.xml中配置的,对SDK来说,SDK在开发时无法确定集成该SDK的app应用的是哪个主题,这就会导致原本期望的显示效果,由于接入的app应用主题的不同而产生变化。这时就需要用自定义的分割线替换默认的分割线。

统一不同机型下的显示效果

由于Android的开发性,部分设备厂家会修改原生的ListView分割线,这导致即使在相同主题下默认分割线的显示效果上也存在差异。

下面两张图片中应用使用的是同一个主题,ListView也都是默认样式。左边是一般机型的显示效果,右边是Sony Z2某个ROM下的显示效果。可以看到右边的ListView分割线颜色更深。放大后还可以看到右边分割线的三个像素还存在颜色渐变效果。

自定义ListView分割线

自定义ListView分割线可以在XML中配置,也可以在代码中配置。

XML中配置方式如下。通过设置android:divider来设置分割线颜色,通过android:dividerHeight属性来设置分割线高度。

android:layout_width="match_parent"

android:layout_height="match_parent"

android:cacheColorHint="#00000000"

android:divider="#F1F1F1"

android:dividerHeight="1dp"

android:overScrollMode="never" >

代码中配置方法如下。通过setDivider()设置分割线颜色,通过setDividerHeight()设置分割线高度。

ListView listView = (ListView) view.findViewById(R.id.listView);

listView.setCacheColorHint(0x00000000);

listView.setDivider(new ColorDrawable(ContextUtil.getColor(R.color.divider)));

listView.setDividerHeight(context.getResources().getDimensionPixelSize(R.dimen.divider_height));

注意:如果android:divider配置的是一个颜色,或者setDivider()配置的是一个ColorDrawable对象,一定要通过android:dividerHeight或setDividerHeight()来设置分割线的高度。不能试图只设置分割线颜色,然后让ListView使用默认分割线高度。查看Android源码可以看到,在调用setDivider()时(通过XML的android:divider配置在读取后也会调用setDivider()),会执行传入的Drawable对象的getIntrinsicHeight()方法,用返回结果来设置分割线的高度,对ColorDrawable来说,其getIntrinsicHeight()方法返回结果始终是-1。所以,如果不通过android:dividerHeight或setDividerHeight()来设置分割线的高度,是无法看到分割线的。

实践建议

如果项目中需要多处用到ListView,每个ListView都单独设置分割线颜色和高度比较麻烦,也容易遗漏。可以从ListView派生一个类,在派生类的构造方法中添加如下几行代码。在XML中直接使用派生出来的新类即可。

this.setCacheColorHint(0x00000000);

this.setDivider(new ColorDrawable(getContext().getColor(R.color.divider)));

this.setDividerHeight(getResources().getDimensionPixelSize(R.dimen.divider_height));

注意:这里除了设置分割线颜色和高度外,还调用setCacheColorHint()。这涉及到ListView的另外一个滑动后背景变黑的问题,也是建议所有用到ListView的地方都执行的。参见 http://blog..net/ccpat/article/details/46793031。

android listview 美化,Android界面美化 -- 自定义ListView分割线相关推荐

  1. arch linux界面优化,ArchLinux美化之界面美化

    ArchLinux美化之界面美化: Conky.BURG 主题图标: Numix--扁平化绚丽黑色调 底部Docky: plank 安装: 查询相关的包:(先添加archlinuxcn源到/etc/p ...

  2. 【Android游戏开发二十三】自定义ListView【通用】适配器并实现监听控件!

    本站文章均为 李华明Himi 原创,转载务必在明显处注明: 转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/android-game/374.html L ...

  3. android app自动更新界面_Android自定义view之模仿登录界面文本输入框(华为云APP)...

    好久不见!!!!!,最近终于挤出时间来更新文章了,废话不多说,直接开始. 效果图如下: 01 分析 1.组合多个控件完成此输入框静态效果 2.hint值上浮下潜动画 3.一些功能 02 步骤 01 自 ...

  4. Innosetup安装界面美化卸载界面美化

    1.安装界面效果图: 2.卸载界面效果图: 3.资源详情 下载资源包 innosetup安装界面美化.zip ┌─ app 包含exe的程序及依赖文件(本例子使用nwjs 27.5) │ ├─ dst ...

  5. 解决listview与scroll冲突,自定义listview高度

    //自定义listview的高度 private void listviewHeight(ListView list){ ListAdapter listadapte = list.getAdapte ...

  6. php界面美化软件,界面美化

    昨天开始一款软件的界面美化,遇到的问题与解决方法. 1,用JPG 文件做背景图片. 把JPG做为资源导入,从资源中加载,再显示出来. 看似非常简单却始终不成功.尝试使用3 种方法(gidplus.IP ...

  7. android仿qq动态视频播放,Android 自定义ListView实现QQ空间界面(说说内包含图片、视频、点赞、评论、转发功能)...

    前端时间刚好需要做一个类似于QQ空间的社区分享功能,说说内容包含文字(话题.内容).视频.图片,还需包含点赞,评论,位置信息等功能. 就采用LIstview做了一个,先来看下效果,GIF太大,CSDN ...

  8. Android使用自定义ListView+ScrollView实现股票界面上下左右滑动

    最近公司做股票相关软件,界面需求是这样的,横向无限长,可以横向滚动,而且最左侧的那一竖栏要定住,网上找了写例子,都太复杂,这里来一个简单的.上图: 一.图片有点瑕疵,不要在意细节.QAQ!自定义Scr ...

  9. android开发 自定义锁屏界面,插件锁屏桌面自定义 “安卓4.0”界面美化教程

    距离Android4.0系统的正式发布已经过去一段时间,除了最先搭载该系统的三星Galaxy Nexus.华为荣耀Android4.0商用版以及小米手机MIUI4.0等,多数用户目前仍然处于观望阶段. ...

最新文章

  1. ICANN敦促业界使用DNSSEC,应对DNS劫持攻击
  2. 机器学习模型身后的数学和统计背景:统计与信息论Probability and Information Theory
  3. 02.德国博士练习_01_cluster_install
  4. 《EDIUS 6.5快刀手高效剪辑技法》 即将上市
  5. Android4.4 及以下TextView,Button等控件使用矢量图报错
  6. Vue学习笔记(五)—— 状态管理Vuex
  7. hdu 1078 FatMouse and Cheese(记忆化搜索)
  8. jax指标的用法_济安线预警指标?JAX指标?
  9. 开源GIS-01-开源库的编译
  10. sm3 算法java_“国密加密算法”SM系列的C#实现方法
  11. Pytorch环境搭建
  12. 花房集团CEO于丹内部信:上市即暴富年代已一去不复返
  13. 【sql】178. 分数排名---两种解决方法,是否使用group by分组成为重点,建议使用分组!!!
  14. 文件上传,搞懂这8种场景就够了
  15. 第十三课、类族的结构进化-------------------狄泰软件学院
  16. Oracle EBS 处理PR无法创建销售订单问题datafix
  17. 线性回归模型的公式推导
  18. 2019腾讯云计算产品经理面经
  19. 【Seagate】希捷12代盘状态忙的修复流程
  20. 三星手机进入挖煤模式方法小结(变砖用)

热门文章

  1. android 在线预览pdf文件(目前最全)
  2. 统一依赖管理Composing builds
  3. Ajax 传递数组、表单+
  4. dl388 linux系统安装系统,HP DL388G5 安装64位linux虚拟系统出错!
  5. HX711压力传感器学习(STM32)
  6. stm32下的HX711称重模块的程序
  7. google-glog功能介绍
  8. plsql 连接 虚拟机Linux下的Oracle数据库 失败
  9. 使用Python对Dicom文件进行读取与写入的实现(pydicom 和 SimpleITK)
  10. 计算机应用基础0006 19春在线作业2,《计算机应用基础0006》19春在线作业 参考资料...