需求
最近需要做这样一个默认地址的按钮,实现的方式有很多种。但是强迫症的我肯定会买弄一下,其实是想尽自己所学用尽可能好的方式来实现,所以选择使用不含图片的手撸layer-list
和CheckBox
来实现。然而,却出现了这样一种情况:
在Android Studio上显示正常,然而在真机上却出现显示异常问题。
分析与设计
- 这样的
1
或0
型按钮首先想到的是CheckBox
,多选一的则是AudioGroup + AudioButton
; - 这样的按钮样式也是比较常见的,所以应该制定一个
Style
; - 将
CheckoutBox
的Style
设置为定制的Style
;
问题
使用平常的layer-list
写法会导致CheckoutBox
的图标显示异常,显示异常的原因是部分机型以及系统为API 23
以下时,处于layer-list
中的<item/>
标签的android:width
和android:height
属性并不能发挥作用。需要通过<item/>
的android:left
、android:right
、android:top
和android:bottom
以及内部的drawable
的size
来控制,各个<item/>
的实际大小。
需要说明的是:
- 第一个
<item/>
的size
决定了layer-list
的大小。item
的android:left
、android:right
、android:top
和android:bottom
可以视为当前item
的margin
。
解决
- 被选中状态下的Drawable
//: drawable/icon_choose.xml
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape android:shape="oval">
<size android:width="20dp" android:height="20dp" />
<corners android:radius="10dp" />
<!-- 未选中时,此处的color设为@color/gray即可-->
<solid android:color="@color/base_red_4" />
</shape>
</item>
<item