在Android的XML drawable中,通过shape标签定义图形时,stroke子标签的dashWidth属性用来指定虚线里每一段实线的长度,单位通常是dp。配合dashGap设置段与段之间的空白间隔,就能画出标准的虚线效果。理解这两个参数的关系,是正确绘制虚线边框或分割线的基础。

dashWidth与dashGap的基本含义
stroke标签用于描述形状的边缘线条。当不设置dashWidth时,线条是连续实线;一旦设置了dashWidth和dashGap,系统就会按实线长、空白长循环绘制。
- dashWidth:每一段实线的长度
- dashGap:实线之间的间隙长度
- width:线条的整体粗细
- color:线条颜色
完整的虚线XML示例
下面给出一个画虚线分割线的drawable文件,其中dashWidth设为10dp,表示每段实线长10dp。
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="line">
<stroke
android:width="2dp"
android:color="#333333"
android:dashWidth="10dp"
android:dashGap="4dp" />
</shape>
为什么虚线有时显示成实线
很多开发者遇到过设置了dashWidth但预览或运行时机型上看到的是实线,常见原因有两类。
硬件加速未关闭
在Android 3.0以上,line形状的虚线在硬件加速下可能不生效。若是作为View背景,可在对应View上关闭硬件加速:
// 在Activity或自定义View中 view.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
shape形态或尺寸不匹配
若使用rectangle并希望边框虚线,需确保stroke正确作用于边框,且View尺寸不为0。以下为矩形虚线边框示例:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<stroke
android:width="1dp"
android:color="#FF0000"
android:dashWidth="8dp"
android:dashGap="6dp" />
</shape>
参数对照表
| 属性 | 含义 | 示例值 |
|---|---|---|
| dashWidth | 实线长度 | 10dp |
| dashGap | 间隙长度 | 4dp |
| width | 线粗 | 2dp |
小结
在Android XML里,shape的stroke中dashWidth直接决定虚线实线段的长度,调整它即可改变虚线密集程度。实际开发中注意关闭硬件加速以及选择正确的shape类型,才能保证虚线正常渲染。
Androidshape_strokedashWidth修改时间:2026-07-27 08:18:18