android shape中的line可以用来画分割线,有时分割线需要设成虚线形式,比如这种
于是我们去网上查资料,大部分都这样说:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="line">
<!-- 形状的高度-->
<size android:height="3dp" />
<!-- 实际显示的线 -->
<stroke android:color="@color/grayddd"
android:dashGap="1dp"
android:width="1dp"
android:dashWidth="2dp" />
</shape>
这个是没问题的,其中:
- 只能画水平线,画不了竖线;
- 线的高度是通过
stroke
的android:width
属性设置的; size
的android:height
属性定义的是整个形状区域的高度;- **
size
的height
必须大于stroke
的width
,否则,线无法显示; ** - 线在整个形状区域中是居中显示的;
- 线左右两边会留有空白间距,线越粗,空白越大;
- 引用虚线的view需要添加属性
android:layerType
,值设为software
,否则显示不了虚线。
很多人不注意,容易掉进第四条和最后一条的坑里,size
的height
相当于画布,stoke
的width
相当于画笔,画布的尺寸小于等于画笔的尺寸都不得行。最后一条也很重要,不过只要大家搜索最新的资料一般都会提示注意,android中大坑不犯,小坑不断,多小心谨慎为好。
当然这些都设置好了,也不一定能显示,因为还有一道坑要踩,那就是在布局里使用的时候,比如,我犯的这个错误:
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:layout_marginBottom="12dp"
android:layout_marginTop="12dp"
android:background="@drawable/gray_dash_line"
android:layerType="software"/>```
乍一看没什么问题,该设置的都设置了,但实际上就是不显示,一开始以为是要开启硬件加速,但是试了之后还是不行,最后仔细看才发现还是高度的问题,就是刚才虚线的`stoke`的`width`为1dp,但这里`android:layout_height="1dp" `就回到刚才的问题了,布局中的高度限制了drawable的高度,更严格上讲是限制了drawable中“画布”的高度,所以,可想而知了。
---------
这篇主要记述自己踩的坑,加深一下记忆,省的以后忘了,免得下次遇到这种问题又得重搞。