需求
最近需要做这样一个默认地址的按钮,实现的方式有很多种。但是强迫症的我肯定会买弄一下,其实是想尽自己所学用尽可能好的方式来实现,所以选择使用不含图片的手撸
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" />