目标需求:按钮选中和不选中两种状态,无文字,纯图标显示,并且带有背景颜色。
如图:
素材:
只有中间的麦克风形状图片,所以背景的浅蓝色需要用xml文件写shape的drawable文件实现,并且需要占用控件的background属性,所以控件必须有另一个属性可以用来显示中间的麦克风图片,这样的话就只能用ImageButton或者CheckBox了,但是ImageButton没有选中的效果,最后用CheckBox来实现了
布局如下:
<CheckBox
android:id="@+id/audioSet"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/pressed_button"
android:padding="15dp"
android:checked="true"
android:gravity="center"
android:button="@null"
android:drawableStart="@drawable/mic_set" />
总体来说很简单,不过有个需要注意的问题:
写xml文件selector的时候,如果你的默认状态只给了资源id,其他状态的item记得放在上面,否则可能没有效果
如下,如果state_checked=true这个item如果放在下面,就会没有选中效果了
<selector xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools">
<item android:drawable="@drawable/mic_mute" android:state_checked="true" />
<item android:drawable="@drawable/mic_normal" tools:ignore="StateListReachable" />
</selector>