Android分割线divider(内含Android虚线分割线失效成实线解决方案)

1,最简单最常见的Android分割线android:attr/listDivider。

最简单最常见的是把Android原生的Android ListView的分割线divider直接拿来作为背景衬托做成分割线divider的效果。比如代码:

    <Viewandroid:layout_width="match_parent"android:layout_height="10dip"android:background="?android:attr/listDivider" />

将这个View放置在不同view之间,比如一个垂直方向的线性布局子view之间。

2,直接将一个图片ImageView作为Android分割线divider。

和1中的类似,只是把View该写成ImageView,效果相同,注意高度和背景颜色,比如可以这样写代码:

    <ImageViewandroid:layout_width="match_parent"android:layout_height="10dip"android:background="@android:color/black" />

更复杂的写法可以在此ImageView的background中再次定制和改造。

3,在一个线性布局LinearLayoutCompat中直接设置分割线。

最新版本的LinearLayoutCompat支持在LinearLayoutCompat中配置分割线要素,我之前写过一篇文章介绍过,《Android Material Design :LinearLayoutCompat添加分割线divider》文章链接地址:http://blog.csdn.net/zhangphil/article/details/48899585

4,重点说一说Android虚线分割线divider。

通常为了做一个Android的虚线分割线divider,通用的方法和代码是:

(第一步)先在drawable目录下创建一个线line的shape文件,比如此dash_line.xml文件代码:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"android:shape="line" ><!--线宽为dashWith,线之间空隙dashGap,dashGap=0dp时,是实线 --><strokeandroid:dashGap="15dip"android:dashWidth="30dip"android:width="1dip"android:color="@android:color/black" /><!-- 虚线高度 --><size android:height="1dip" />  </shape>

(第二步)然后在自己的布局文件中添加一个LinearLayout作为不同view的分割线,比如:

<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:background="@android:color/white"android:orientation="vertical" ><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="csdn zhangphil" /><LinearLayoutandroid:id="@+id/dashLine"android:layout_width="match_parent"android:layout_height="2dip"android:background="@drawable/dash_line"android:orientation="horizontal" /><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="csdn zhangphil" /></LinearLayout>

这是目前网上一搜一大堆互相抄来抄去、实现Android虚线分割线divider的方法和代码(奇怪的是很多人在互相抄来抄去的时候也不检验有效性和时效性),这是很早以前也许有效的方法,遗憾的是,上述的方法和代码也许在Android 3.0以下是可以画出虚线的,但在Android 3.0以上最新Android SDK设备上,代码在真机上跑起来,根本画不出虚线,画出的而是一条实线!

究其根本原因,是因为在Android 3.0以上,Android系统在众多绘图操作时候默认开启了硬件加速,因此导致在最新的高版本Android系统上画dash gap line失效,这一问题在Android官方问题报告页面(https://code.google.com/p/android/issues/detail?id=29944)有问题报告反馈以及给出的各种五花八门的解决方案。总结起来,相对比较有效、且简单的解决方案主要有三个:

解决方案A:setLayerType(View.LAYER_TYPE_SOFTWARE, null)

保持如本案例中第一步和第二步的代码原封不动,只需要在Java代码中做一次判断:

LinearLayout dashLine=(LinearLayout) findViewById(R.id.dashLine);if(android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.HONEYCOMB) {dashLine.setLayerType(View.LAYER_TYPE_SOFTWARE, null);}

当Android在3.0及以上版本时候setLayerType(View.LAYER_TYPE_SOFTWARE, null);即可顺利画出虚线分割线。

解决方案B:android:layerType="software"

其实就是解决方案A的Java代码转移到xml中做配置,保持本案例中第一步代码原封不动,仅仅在第二步的代码中增加设置一个属性android:layerType="software" 改进成这样:

<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:background="@android:color/white"android:orientation="vertical" ><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="csdn zhangphil" /><LinearLayoutandroid:id="@+id/dashLine"android:layout_width="match_parent"android:layout_height="2dip"android:background="@drawable/dash_line"android:layerType="software"android:orientation="horizontal" /><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="csdn zhangphil" /></LinearLayout>

解决方案C:修改AndroidManifest.xml中的application属性,设置:android:hardwareAccelerated="false"。

此解决方案其实就是告知Android系统关闭硬件加速,这样也可以顺利画出虚线分割线。但是这样关闭硬件加速的影响是全局的,将导致整体代码运行性能急剧降低,如果仅仅为了画一个虚线而关闭整个APP的硬件加速,实在是得不偿失,丢了大西瓜捡了个小芝麻,因此除非万不得已,我个人不建议采用解决方案C,我个人建议采取解决方案B。

5,ListView在代码运行时设置分割线divider。

通常会在一个布局中先写好、配置好ListView的样式如分割线,我以前写过文章专门介绍过:《Android基础小技术点:Android ListView设置背景图片及分割线、周边距 》文章链接:http://blog.csdn.net/zhangphil/article/details/48948217 。

不过,ListView的分割线也可以在Java代码运行时动态设置,设置代码,比如:

mListView.setDivider(getResources().getDrawable(android.R.drawable.arrow_down_float));

(备注:我写作这篇文章的时间是2015年10月11日。不排除也许在未来的Android版本迭代中,Android官方SDK调整画虚线分割线的代码,使得画虚线分割线更自然。)



Android分割线divider(内含Android虚线分割线失效成实线解决方案)相关推荐

  1. echarts鼠标悬停轴线是虚线,改成实线

    echarts鼠标悬停轴线是虚线,改成实线 虚线: tooltip: {axisPointer: {type: 'line',lineStyle: {// type: 'solid', 打开就是实线类 ...

  2. android listview divider color,android listview 属性

    1. 背景色: listView设置背景色android:background="@drawable/bg",拖动或者点击list空白位置的时候发现ListItem都变成黑色. 因 ...

  3. Android Material Design :LinearLayoutCompat添加分割线divider

     Android Material Design :LinearLayoutCompat添加分割线divider Android Material Design 扩展支持包中的LinearLayo ...

  4. Android 设置虚线分割线

    效果图: Layout.xml布局中View设置background <Viewandroid:layout_width="match_parent"android:layo ...

  5. android 较高版本,页面分割线实现LinearLayoutCompat布局简单事例

    转载请注明出处:王亟亟的大牛之路 以前,我们如果要对一个界面切割,分成各个部分可能需要画好多个Layout然后include进来或者用个什么空白的ImageView去填充.V7包中有了一个更简便的实现 ...

  6. RecyclerView(四)设置分割线样式(Android 5.0 新特性)

    Android RecyclerView(四)设置分割线样式(Android 5.0 新特性) 样式一 在这里,其实是设置了每一个 条目布局中的子布局的android:layout_margin = ...

  7. android timepicker分割线颜色,关于Android的TimePicker和DatePicker一些简单的使用问题

    前几天有个需求需要实现这样的一个时间选择器.我没有用"基友"网站上的WheelView 我直接用的是Android系统提供的组件TimePicker和DatePicker. 需求图 ...

  8. android自定义u形线,Android自定义彩色织带分割线

    前言 最近开发的一个产品需要涉及到订单,订单页涉及到了一个UI元素,类似饿了么的订单页以及支付宝口碑外卖订单页的彩带(通俗点讲就是一条两种颜色相间而成的分割线): 可以看到,风格基本都是以两种颜色为主 ...

  9. 线性布局LinearLayout设置分割线divider

    目录 一.线性布局LinearLayout设置分割线divider 总结 一.线性布局LinearLayout设置分割线divider 上代码: <LinearLayoutandroid:id= ...

最新文章

  1. Spring4+quartz2集群借助邮箱或是短信实现生日的农历提醒(Quartz实现农历、阴历、公历生日提醒)...
  2. 交大世界大学排名 计算机专业,2018考研:计算机专业全球院校排名公布,上海交通大学竟排第一?...
  3. vue中img标签onerror事件
  4. java解密方法,java加密,解密方法
  5. js 对象和构造函数
  6. js中图片获取src的正则
  7. 美的集团:已耗资4.86亿元回购847.4万股
  8. orocod_kdl学习(一):坐标系变换
  9. linux -- 个人笔记
  10. 百度移动搜索主要有如下几类结果构成
  11. 一文读懂腾讯云“AI即服务”战略新品“智能云”
  12. sscanf int 取地址_面试题:我有一批IPv6地址,你帮我想个办法来存储?
  13. Delphi XE8 iOS与Android移动应用开发(APP开发)[完整中文版]
  14. 简单的matlab阶乘计算
  15. 深度学习目标检测之SSD网络(超级详细)
  16. 使用udp 发送一张jpeg图片,upd接收后转成opencv的Mat格式
  17. Coursera 学习记录:细菌分组(通过冒泡排序实现两组有差异的分类)
  18. 27、fd_set与FD_SETSIZE详解
  19. 校园网连不上ipv6问题
  20. APP推广三招:ASO、首发推荐、媒体曝光

热门文章

  1. 厦门大学计算机学院面试题,【图片】一战厦大计算机上岸,经验帖。慢更【考研吧】_百度贴吧...
  2. std::string::npos的使用
  3. C++ DOM 解析和选择器工具 gumbo-parser和gumbo-query的集成编译
  4. C语言学习:剪切板UNICODE码使用
  5. java零散知识记录
  6. 2021年西式面点师(高级)考试内容及西式面点师(高级)答案解析
  7. github的token使用方法
  8. 微信小程序缓存(本地缓存,同步缓存,异步缓存)
  9. 文件上传漏洞及常见的利用方式
  10. 详述 Bresenham 线生成算法