1、在 Activity 中要改变 radio前面的圈,只要改变android:button属性即可
如:
selector_radio.xml 代码如下:
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:state_checked="true"
android:drawable="@drawable/radio_true"/>
<item
android:state_checked="false"
android:drawable="@drawable/radio_false"/>
</selector>
styles.xml 代码如下:
<style name="rb">
<item name="android:layout_width">wrap_content</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:button">@drawable/selector_radio</item>
<!--<item name="android:background">@drawable/selector_radio</item>-->
</style>
activity.xml代码如下:
<RadioButton
android:id="@+id/rb_on"
style="@style/rb"
android:text="关闭"
android:textSize="25sp"
android:textColor="@color/colorWhite"
android:layout_marginStart="50dp"/>
radio 的图片不会变形,如果会可改用如下方式:
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:state_checked="true"
android:drawable="@drawable/bitmap_radio_true"/>
<item
android:state_checked="false"
android:drawable="@drawable/bitmap_radio_false"/>
</selector>
其中,bitmap_radio_true.xml 代码如下:
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
android:gravity="start|center_vertical"
android:src="@drawable/radio_true" />
bitmap_radio_false.xml 代码如下:
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
android:gravity="start|center_vertical"
android:src="@drawable/radio_false" />
效果图:
2、AppCompatActivity 中比较麻烦
如果按上面那种方式,在android4.4.4上测试,预览图会改变,但是真机样式不会更改,据说是安卓版本的问题。
所以需使用改变 android:background 属性的方式,即
<item name="android:background">@drawable/selector_radio</item>
但这样图片会拉伸变宽置覆盖text属性的值如:
并且在真机上发现自带的圈并没有消失。需添上如下代码:
Bitmap rb_img = null;
Drawable drawable_rb = new BitmapDrawable(getResources(),rb_img);
((RadioButton)findViewById(R.id.rb_on)).setButtonDrawable(drawable_rb);
这种情况如果还需要文字说明,要另外增加 TextView,并将radido的 android:layout_width值增大置覆盖 TextView,并使 selector 的 android:drawable 改为 bit样式,代码在上面。