首先,有采用文章来自:http://blog.sina.com.cn/s/blog_4b93170a0100qhwa.html
一.创建xml文件,位置:drawable/xxx.xml,同目录下记得要放相关图片
<?xml version="1.0" encoding="utf-8" ?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!-- 默认时的背景图片-->
<item android:drawable="@drawable/pic1" />
<!-- 没有焦点时的背景图片 -->
<item android:state_window_focused="false"
android:drawable="@drawable/pic1" />
<!-- 非触摸模式下获得焦点并单击时的背景图片 -->
<item android:state_focused="true" android:state_pressed="true" android:drawable= "@drawable/pic2" />
<!-- 触摸模式下单击时的背景图片-->
<item android:state_focused="false" android:state_pressed="true" android:drawable="@drawable/pic3" />
<!--选中时的图片背景-->
<item android:state_selected="true" android:drawable="@drawable/pic4" />
<!--获得焦点时的图片背景-->
<item android:state_focused="true" android:drawable="@drawable/pic5" />
</selector>
二.使用xml文件:
1.方法一:在listview中配置android:listSelector="@drawable/xxx
或者在listview的item中添加属性android:background="@drawable/xxx"
2.方法二:Drawable drawable = getResources().getDrawable(R.drawable.xxx);
ListView.setSelector(drawable);但是这样会出现列表有时候为黑的情况,需要加上:android:cacheColorHint="@android:color/transparent"使其透明。
相关属性:
android:state_selected是选中
android:state_focused是获得焦点
android:state_pressed是点击
android:state_enabled是设置是否响应事件,指所有事件
根据这些状态同样可以设置button的selector效果。也可以设置selector改变button中的文字状态。
以下是配置button中的文字效果:
drawable/button_font.xml
1 <?xml version="1.0" encoding="utf-8"?> 2 <selector xmlns:android="http://schemas.android.com/apk/res/android"> 3 <item android:state_selected="true" android:color="#FFF" /> 4 <item android:state_focused="true" android:color="#FFF" /> 5 <item android:state_pressed="true" android:color="#FFF" /> 6 <item android:color="#000" /> 7 </selector>
Button还可以实现更复杂的效果,例如渐变
drawable/button_color.xml
1 <?xml version="1.0" encoding="utf-8"?> 2 <selector xmlns:android="http://schemas.android.com/apk/res/android"> / 3 <item android:state_pressed="true">//定义当button 处于pressed 状态时的形态。 4 <shape> 5 6 <gradient android:startColor="#8600ff" /> 7 8 <stroke android:width="2dp" android:color="#000000" /> 9 <corners android:radius="5dp" /> 10 <padding android:left="10dp" android:top="10dp" 11 android:bottom="10dp" android:right="10dp"/> 12 </shape> 13 14 </item> 15 <item android:state_focused="true">//定义当button获得 focus时的形态 16 <shape> 17 <gradient android:startColor="#eac100"/> 18 <stroke android:width="2dp" android:color="#333333" color="#ffffff"/> 19 <corners android:radius="8dp" /> 20 <padding android:left="10dp" android:top="10dp" 21 android:bottom="10dp" android:right="10dp"/> 22 </shape> 23 </item> 24 </selector>
最后,需要在包含 button的xml文件里添加两项。例如main.xml 文件,需要在<Button />里加两项android:focusable="true" android:background="@drawable/button_color"
下面再添加一个Android注册按钮的例子:
1 <TextView 2 android:id="@+id/register" 3 android:clickable="true" 4 android:layout_width="wrap_content" 5 android:layout_height="wrap_content" 6 android:layout_alignParentRight="true" 7 android:layout_marginRight="20dip" 8 android:layout_marginTop="15dip" 9 android:text="@string/register" //<string name="register">注册</string> 10 android:textColor="@color/text_color_selector" 11 android:background="@drawable/textview_background" 12 android:textSize="16sp" />
res/color/text_color_selector.xml
1 <?xml version="1.0" encoding="utf-8"?> 2 <selector xmlns:android="http://schemas.android.com/apk/res/android"> 3 <item android:state_focused="true" android:color="#ffffff" /> 4 <item android:state_pressed="true" android:color="#ffffff" /> 5 <item android:color="#0099cc"></item> 6 </selector>
res/drawable/textview_background.xml
1 <?xml version="1.0" encoding="UTF-8"?> 2 <selector xmlns:android="http://schemas.android.com/apk/res/android"> 3 <item android:state_pressed="true" > 4 <shape> 5 <solid android:color="#0099cc" /> 6 <stroke android:width="1dip" android:color="#0099cc" /> 7 <corners android:radius="2dp" /> 8 <padding android:left="2dp" 9 android:top="2dp" 10 android:right="2dp" 11 android:bottom="2dp"/> 12 </shape> 13 </item> 14 <item android:state_focused="true" > 15 <shape> 16 <solid android:color="#0099cc" /> 17 <stroke android:width="1dip" android:color="#0099cc" /> 18 <corners android:radius="2dp" /> 19 <padding android:left="2dp" 20 android:top="2dp" 21 android:right="2dp" 22 android:bottom="2dp"/> 23 </shape> 24 </item> 25 <item> 26 <shape> 27 <solid android:color="#00000000" /> 28 <stroke android:width="1dip" android:color="#0099cc" /> 29 <corners android:radius="2dp" /> 30 <padding android:left="2dp" 31 android:top="2dp" 32 android:right="2dp" 33 android:bottom="2dp"/> 34 </shape> 35 </item> 36 </selector>