实在想不出什么标题,所以用 BB 代替了,这样格式好看些而已 ~
瞎BB1
做项目时遇到一个效果图,由于是单选,所以用到了RadioButton,RadioButton 虽然有drawableLeft、drawableRight 等属性,但是没办法实现在左上角、右上角等角落加上图片吖,而且我只是需要选中时显示这个对勾而已,网上一大堆自定义RadioGroup是什么鬼,就加个图片而已,需要这么麻烦嘛 ~ ~ ~,于是动用自己的灵光一闪,额,用词不准不要介意,突然想到了一个神器——Android的Drawable之 LayerDrawable。
BB2——LayerDrawable
LayerDrawable 对应的 XML 标签是 < layer-list > ,它表示的是一种层次化的 Drawable 集合,通过将不同的 Drawable 放置在不同的层上面从而达到一种叠加后的效果。用法网上应该有很多,我就不赘述了,后期会上 Drawable 系列的文章,到时候也会详细讲述的。
当然如果现在想了解更多的话也可以去看看这篇文章 LAYER-LIST篇,我就是从这里找到的灵感,直接上代码吧,这是上面效果图里面的 RadioButton 的背景图的 XML 实现。
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
<!-- RadioButton没有被选中时的item -->
<item android:state_checked="false">
<shape>
<solid android:color="@color/white"/>
<corners android:radius="2dp" />
</shape>
</item>
<!-- RadioButton 选中时的item -->
<item android:state_checked="true">
<layer-list>
<!-- layer-list 第一层橘色的边框 -->
<item>
<shape>
<solid android:color="@color/white"/>
<stroke android:color="#66B907" android:width="1dp" />
<corners android:radius="2dp" />
</shape>
</item>
<!-- layer-list 第二层右上角的图片 -->
<item>
<bitmap android:src="@drawable/withdraw_selected" android:gravity="right|top"/>
</item>
</layer-list>
</item>
</selector>
注意: 如果你看了 LAYER-LIST 这篇文章就知道 < item > 标签里面就有 drawable 属性,那为什么我还要再加个 bitmap 的子标签呢,因为直接在 item 里加图片的话会被拉伸,拉伸成整个背景图,而我们只需要在右上角显示而已,所以用 bitmap 标签可以保证图片的原始大小。当然大家也可以自己去尝试这种情况。
好了 ,到这里就已经实现了 RadioButton 的背景图添加,是不是特别方便,我们这种简单的需求,就不需要用到什么自定义 RadioGroup 啥的了。通过这种方式,大家还可以实现各种特效哟,什么左上角,左下角,右下角啥的都不成问题了,发挥你的想象吧。
最后贴下完整的 RadioGroup 的代码 :
<RadioGroup
android:id="@+id/withdraw_account_radiogroup"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="15dp"
android:layout_below="@id/withdraw_modify"
android:orientation="horizontal">
<RadioButton
android:id="@+id/withdraw_account_wechat"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
android:gravity="center"
android:paddingTop="15dp"
android:paddingBottom="15dp"
android:paddingLeft="30dp"
android:paddingRight="30dp"
android:text="微信"
android:textColor="#FF4A4A4A"
android:textSize="14sp"
android:button="@null"
android:checked="true"
android:background="@drawable/btn_white_withdraw_radiogroup"/>
<RadioButton
android:id="@+id/withdraw_account_alipay"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
android:gravity="center"
android:paddingTop="15dp"
android:paddingBottom="15dp"
android:paddingLeft="30dp"
android:paddingRight="30dp"
android:layout_marginLeft="40dp"
android:text="支付宝"
android:textColor="#FF4A4A4A"
android:textSize="14sp"
android:button="@null"
android:background="@drawable/btn_white_withdraw_radiogroup"/>
</RadioGroup>
这就是上面效果图里的 RadioGroup 的所有代码,其中 btn_white_withdraw_radiogroup 就是那个 layer-list 的 XML,大家参考就好,按照自己的需求去实现,切勿直接 copy ,直接 copy 肯定是会出错的。