简书链接:最佳绘制一条边selectorlayoutlist以及个spinner设置背景图片,设置边距。
文章字数:326,阅读全文大约需要1分钟

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
<?xml version="1.0" encoding="utf-8"?>

<selector
xmlns:android="http://schemas.android.com/apk/res/android"

>
<item android:state_enabled="true">

<!-- 控制内容右边距离防止和内容如何在一起-->
<layer-list android:paddingRight="34dp">
<item android:height="1dp" android:gravity="bottom">
<shape>
<solid android:color="@color/spinner_color_selector" />
</shape>
</item>

<item android:left="10dp" android:right="10dp">
<bitmap android:gravity="right" android:src="@drawable/spinner_down" />
</item>
</layer-list>

</item>
<item android:state_enabled="false">

<layer-list android:paddingRight="34dp">
<item android:height="1dp" android:gravity="bottom">
<shape>
<solid android:color="@color/spinner_color_selector" />
</shape>
</item>

<item android:left="10dp" android:right="10dp">
<bitmap android:gravity="right" android:src="@drawable/spinner_down_disable" />
</item>
</layer-list>

</item>


</selector>






该方法不会绘制无关的背景颜色,网上的方法会强制设置2种背景颜色,而且导致重复绘制。

image.png

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_enabled="true">


<layer-list android:paddingRight="34dp">
<!-- 控制内容右边距离防止和内容如何在一起-->
<item android:width="150dp">
<shape>
<!-- <solid android:color="@color/themeColorSecond"/>-->
<corners android:radius="3dp" />
<stroke android:width="1dp" android:color="@color/spinner_color_selector" />
</shape>
</item>

<item android:left="10dp" android:right="10dp">
<bitmap android:gravity="right" android:src="@drawable/spinner_down" />
</item>
</layer-list>
</item>
<item android:state_enabled="false">


<layer-list android:paddingRight="34dp">
<!-- 控制内容右边距离防止和内容如何在一起-->
<item>
<shape>
<!-- <solid android:color="@color/themeColorSecond"/>-->
<corners android:radius="3dp" />
<stroke android:width="1dp" android:color="@color/shallowGray" />
</shape>
</item>

<item android:left="10dp" android:right="10dp">
<bitmap android:gravity="right" android:src="@drawable/spinner_down_disable" />
</item>
</layer-list>
</item>


</selector>

image.png

绘制右下描边
image.png

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
<?xml version="1.0" encoding="utf-8"?>

<selector xmlns:tools="http://schemas.android.com/tools" xmlns:android="http://schemas.android.com/apk/res/android"
>
<item android:state_pressed="false">
<layer-list >
<item android:height="1px" android:gravity="bottom" >
<shape>
<solid android:color="@color/shallowGray" />
</shape>
</item>
<item android:gravity="right" android:width="1px" >
<shape>
<size android:width="1px"/>
<solid android:color="@color/shallowGray"/>
</shape>
</item>
<!-- 下面的item只是为了预览-->
<item android:bottom="1px" android:right="1px">
<shape >
<size android:width="5dp" android:height="5dp"/>
<solid android:color="@color/transparent"/>
</shape>
</item>


</layer-list>
</item>

<item android:state_pressed="true">
<ripple
android:color="#55000000" tools:targetApi="lollipop">
<item android:drawable="@drawable/white"></item>

</ripple>
</item>



</selector>






最后一个有兼容性问题,android22测试整个背景变成了描边色。