1、如果你想做一个背景选择器,那么在drawable文件夹下去新建selector xml,现在就面临两种大的方向选择:
(1)背景选择器:
背景选择器又有两张选择:第一种是当你按下时时切换一张图片,那么就直接用UI给的图片,这个很简单;我要说的是第二种,通常就是UI没有给你图片,那么你就要自己来画选中背景的变化,这个时候你很容易犯一个错,那就是直接在drawable的后面写“#000”等颜色值,比如是下面这种写法:
<item android:drawable="#c1815e" android:state_pressed="true" />一运行就会报错。
正确的写法有两种,方法一其实我不怎么推荐用,因为colors文件里面是用来存放通用的color的:
方法一:在values的文件夹下的colors.xml文件里面把颜色值写在哪里:
<color name="colorAccent">#FF4081</color>然后再去selector里面把这个名字写上去就可以了:
<item android:drawable="@color/colorAccent" android:state_selected="true" />
然后一个完整的例子:
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@color/firstSelect" android:state_selected="true" /> <item android:drawable="@color/firstSelect" android:state_pressed="true" /> <item android:drawable="@color/firstNormal"/> </selector>
方法二:是在drawable文件夹下,新建两个shape类的xml,一个normal,一个select,然后在里面写填充:
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android"> <solid android:color="#2ff208"/> </shape>再在selector里面去使用,以下是一个完整的例子:
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@drawable/backagegroud1_select" android:state_selected="true" /> <item android:drawable="@drawable/backagegroud1_select" android:state_pressed="true" /> <item android:drawable="@drawable/backagegroud1_normal" /> </selector>
(2)字体选择器:
字体选择器跟布局选择器是不一样的,在res目录下新建xml文件,但是里面不再是darwable了,而是在res目录 下新建color文件夹。然后虽然如果你在drawable的目录下也能达到同样的效果,只不过如果实在drawable的话里面的color不能直接写值,但是不建议那样做,因为不符合规范。
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:color="#fff" android:state_pressed="true" /> <item android:color="#000" android:state_checkable="false"/> <item android:color="#fff" android:state_checkable="true" /> </selector>
使用的时候用的是@color
<RadioButton android:id="@+id/rd_1" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:background="@drawable/bg1_selector" android:button="@null" android:textColor="@color/text_bg_selector" android:gravity="center" android:text="第一个" />