Android如何自定义RadioButton 实现指定选中与未选中展示样式
问题所在
你当前的实现逻辑错误点在于仅将状态选择器绑定到了android:button属性,该属性仅控制RadioButton左侧的圆形单选指示器样式,无法覆盖整个控件的背景状态,因此无法实现选中时整行背景变色的效果。同时系统默认的android:button属性会自带内置边距限制,也可能导致指示器显示效果不符合预期。
调整方案
- 新增整行背景选择器
radio_item_bg.xml,用于控制选中/未选中状态下的整行背景样式,示例代码如下:
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_checked="true" android:drawable="@drawable/blue_round_rect_bg" /> <item android:state_checked="false" android:drawable="@android:color/transparent" /> </selector>
你需要自行实现blue_round_rect_bg作为选中状态的蓝色圆角矩形背景。
- 修改RadioButton布局代码,隐藏系统默认的button组件,将单选指示器移到drawableStart位置,同时绑定新的背景选择器:
<RadioButton android:id="@+id/btn_language_english_us" android:layout_width="match_parent" android:layout_height="34dp" android:layout_marginStart="8dp" android:layout_marginEnd="8dp" android:background="@drawable/radio_item_bg" android:button="@null" android:drawableStart="@drawable/radio_bg" android:drawablePadding="12dp" android:paddingHorizontal="12dp" android:gravity="center_vertical" android:fontFamily="@font/sansation" android:text="@string/us_english" android:textColor="@color/white" android:textSize="16sp" />
- 可选优化:如果需要控制单选指示器的大小,API 23及以上可以在RadioButton属性中添加
android:drawableWidth、android:drawableHeight设置固定尺寸,低版本可以直接调整矢量资源的固有尺寸。
内容的提问来源于stack exchange,提问作者Fernando Amaral
相关产品推荐
相关产品推荐

