android listview 美化,Android界面美化 -- 自定义ListView分割线
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分割线相关推荐
- arch linux界面优化,ArchLinux美化之界面美化
ArchLinux美化之界面美化: Conky.BURG 主题图标: Numix--扁平化绚丽黑色调 底部Docky: plank 安装: 查询相关的包:(先添加archlinuxcn源到/etc/p ...
- 【Android游戏开发二十三】自定义ListView【通用】适配器并实现监听控件!
本站文章均为 李华明Himi 原创,转载务必在明显处注明: 转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/android-game/374.html L ...
- android app自动更新界面_Android自定义view之模仿登录界面文本输入框(华为云APP)...
好久不见!!!!!,最近终于挤出时间来更新文章了,废话不多说,直接开始. 效果图如下: 01 分析 1.组合多个控件完成此输入框静态效果 2.hint值上浮下潜动画 3.一些功能 02 步骤 01 自 ...
- Innosetup安装界面美化卸载界面美化
1.安装界面效果图: 2.卸载界面效果图: 3.资源详情 下载资源包 innosetup安装界面美化.zip ┌─ app 包含exe的程序及依赖文件(本例子使用nwjs 27.5) │ ├─ dst ...
- 解决listview与scroll冲突,自定义listview高度
//自定义listview的高度 private void listviewHeight(ListView list){ ListAdapter listadapte = list.getAdapte ...
- php界面美化软件,界面美化
昨天开始一款软件的界面美化,遇到的问题与解决方法. 1,用JPG 文件做背景图片. 把JPG做为资源导入,从资源中加载,再显示出来. 看似非常简单却始终不成功.尝试使用3 种方法(gidplus.IP ...
- android仿qq动态视频播放,Android 自定义ListView实现QQ空间界面(说说内包含图片、视频、点赞、评论、转发功能)...
前端时间刚好需要做一个类似于QQ空间的社区分享功能,说说内容包含文字(话题.内容).视频.图片,还需包含点赞,评论,位置信息等功能. 就采用LIstview做了一个,先来看下效果,GIF太大,CSDN ...
- Android使用自定义ListView+ScrollView实现股票界面上下左右滑动
最近公司做股票相关软件,界面需求是这样的,横向无限长,可以横向滚动,而且最左侧的那一竖栏要定住,网上找了写例子,都太复杂,这里来一个简单的.上图: 一.图片有点瑕疵,不要在意细节.QAQ!自定义Scr ...
- android开发 自定义锁屏界面,插件锁屏桌面自定义 “安卓4.0”界面美化教程
距离Android4.0系统的正式发布已经过去一段时间,除了最先搭载该系统的三星Galaxy Nexus.华为荣耀Android4.0商用版以及小米手机MIUI4.0等,多数用户目前仍然处于观望阶段. ...
最新文章
- ICANN敦促业界使用DNSSEC,应对DNS劫持攻击
- 机器学习模型身后的数学和统计背景:统计与信息论Probability and Information Theory
- 02.德国博士练习_01_cluster_install
- 《EDIUS 6.5快刀手高效剪辑技法》 即将上市
- Android4.4 及以下TextView,Button等控件使用矢量图报错
- Vue学习笔记(五)—— 状态管理Vuex
- hdu 1078 FatMouse and Cheese(记忆化搜索)
- jax指标的用法_济安线预警指标?JAX指标?
- 开源GIS-01-开源库的编译
- sm3 算法java_“国密加密算法”SM系列的C#实现方法
- Pytorch环境搭建
- 花房集团CEO于丹内部信:上市即暴富年代已一去不复返
- 【sql】178. 分数排名---两种解决方法,是否使用group by分组成为重点,建议使用分组!!!
- 文件上传,搞懂这8种场景就够了
- 第十三课、类族的结构进化-------------------狄泰软件学院
- Oracle EBS 处理PR无法创建销售订单问题datafix
- 线性回归模型的公式推导
- 2019腾讯云计算产品经理面经
- 【Seagate】希捷12代盘状态忙的修复流程
- 三星手机进入挖煤模式方法小结(变砖用)
热门文章
- android 在线预览pdf文件(目前最全)
- 统一依赖管理Composing builds
- Ajax 传递数组、表单+
- dl388 linux系统安装系统,HP DL388G5 安装64位linux虚拟系统出错!
- HX711压力传感器学习(STM32)
- stm32下的HX711称重模块的程序
- google-glog功能介绍
- plsql 连接 虚拟机Linux下的Oracle数据库 失败
- 使用Python对Dicom文件进行读取与写入的实现(pydicom 和 SimpleITK)
- 计算机应用基础0006 19春在线作业2,《计算机应用基础0006》19春在线作业 参考资料...