有两种通过xml定义虚线的方法:
方法一
定义drawable_dash_line.xml
文件
<?xml version="1.0" encoding="utf-8"?>
<shape android:shape="line" xmlns:android="http://schemas.android.com/apk/res/android">
<stroke
android:color="#979797"
android:dashWidth="6dp"
android:dashGap="4dp"
android:width="1dp"/>
</shape>
- color:虚线的颜色
- dashWidth:虚线中的短线长度
- dashGap:虚线每个短线之间间隔
- width:表示虚线的“厚度”
使用
<View
android:layout_width="match_parent"
android:layout_height="5dp"
android:background="@drawable/drawable_dash_line"
android:layerType="software"
/>
layerType
需要设置为software
,否则显示的是一条直线。(硬件加速不支持这种情况,因此需要禁用)。layout_height
需要大于上面drawable_dash_line.xml
中定义的虚线的width
,否则显示不出来。
方法二
定义drawable_dash_line_2.xml
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:left="-5dp" android:top="-5dp" android:right="-5dp" android:bottom="0dp">
<shape>
<solid android:color="#ffffff" />
<stroke
android:dashGap="5dp"
android:dashWidth="5dp"
android:width="1dp"
android:color="#979797" />
</shape>
</item>
</layer-list>
这里利用的是将layer-list
中item
的各个left
、top
之类的属性设置为负值时候可以让这一边显示到View的边框之外(即不可见的地方)来达到只显示某一边的效果。上面定义了除去bottom
之外的其他边的margin都为-5dp
,这样就只会显示bottom
这一条底边,实际上-5dp
是随意定义的一个负值,你使用-1dp
也是可以的。
layer-list
的用法建议参考这篇文章
使用
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="@drawable/drawable_dash_line_2"
/>
参考文章:
https://stackoverflow.com/questions/6103713/how-do-i-make-a-dotted-dashed-line-in-android