一.创建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/handle_normal" android:state_enabled="true" android:state_window_focused="false"/>
- <!-- 触摸模式按下时的背景图片 -->
- <item android:drawable="@drawable/handle_pressed" android:state_pressed="true"/>
- <item android:drawable="@drawable/handle_focused" android:state_enabled="true" android:state_focused="true"/>
- <item android:drawable="@drawable/handle_normal" android:state_enabled="true"/>
- <!-- 获得焦点时的图片背景 -->
- <item android:drawable="@drawable/handle_focused" android:state_focused="true"/>
- <!--
- android:state_selected是选中
- android:state_focused是获得焦点
- android:state_pressed是点击
- android:state_enabled是设置是否响应事件,指所有事件
- -->
- </selector>
二.使用xml文件:
1.方法一:在listview中配置android:listSelector="@drawable/xxx
或者在listview的item中添加属性android:background="@drawable/xxx"
2.方法二:Drawable drawable = getResources().getDrawable(R.drawable.xxx);
相关属性:
android:state_selected是选中
android:state_focused是获得焦点
android:state_pressed是点击
android:state_enabled是设置是否响应事件,指所有事件
根据这些状态同样可以设置button的selector效果。也可以设置selector改变button中的文字状态。
以下是配置button中的文字效果:
drawable/button_font.xml
- <?xml version="1.0" encoding="utf-8"?>
- <selector xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:state_selected="true" android:color="#FFF" />
- <item android:state_focused="true" android:color="#FFF" />
- <item android:state_pressed="true" android:color="#FFF" />
- <item android:color="#000" />
- </selector>
drawable/button_color.xml
- <span style="color:#330033;"><?xml version="1.0" encoding="utf-8"?>
- <selector xmlns:android="http://schemas.android.com/apk/res/android"> /
- <item android:state_pressed="true">//定义当button 处于pressed 状态时的形态。
- <shape>
- <gradient android:startColor="#8600ff" />
- <stroke android:width="2dp" android:color="#000000" />
- <corners android:radius="5dp" />
- <padding android:left="10dp" android:top="10dp"
- android:bottom="10dp" android:right="10dp"/>
- </shape>
- </item>
- <item android:state_focused="true">//定义当button获得 focus时的形态
- <shape>
- <gradient android:startColor="#eac100"/>
- <stroke android:width="2dp" android:color="#333333" color="#ffffff"/>
- <corners android:radius="8dp" />
- <padding android:left="10dp" android:top="10dp"
- android:bottom="10dp" android:right="10dp"/>
- </shape>
- </item>
- </selector></span><span style="color:#ff0000;"> </span>
最后,需要在包含 button的xml文件里添加两项。例如main.xml 文件,需要在<Button />里加两项
android:focusable="true" android:background="@drawable/button_color"这样就把drawale/button_color.xml文件与这个控件关联起来了。
当然除了使用drawable这样的图片外今天谈下自定义图形shape的方法,对于Button控件
Android上支持以下几种属性shape、gradient、stroke、corners等。我们就以目前系统的Button的selector为例说下:
Java代码
1. <shape>
2. <gradient
3. android:startColor="#ff8c00"
4. android:endColor="#FFFFFF"
5. android:angle="270" />
6. <stroke
7. android:width="2dp"
8. android:color="#dcdcdc" />
9. <corners
10. android:radius="2dp" />
11.<padding
12. android:left="10dp"
13. android:top="10dp"
14. android:right="10dp"
15. android:bottom="10dp" />
16.</shape>
对于上面,这条shape的定义,分别为渐变,在gradient中startColor属性为开始的颜色,
endColor为渐变结束的颜色,下面的angle是角度。接下来是stroke可以理解为边缘,corners
为拐角这里radius属性为半径,最后是相对位置属性padding。
对于一个Button完整的定义可以为:
Java代码
1. <?xml version="1.0" encoding="utf-8"?>
2. <selector
3. xmlns:android="http://www.norkoo.com">
4. <item android:state_pressed="true" >
5. <shape>
6. <gradient
7. android:startColor="#ff8c00"
8. android:endColor="#FFFFFF"
9. android:angle="270" />
10. <stroke
11. android:width="2dp"
12. android:color="#dcdcdc" />
13. <corners
14. android:radius="2dp" />
15. <padding
16. android:left="10dp"
17. android:top="10dp"
18. android:right="10dp"
19. android:bottom="10dp" />
20. </shape>
21. </item>
22.
23. <item android:state_focused="true" >
24. <shape>
25. <gradient
26. android:startColor="#ffc2b7"
27. android:endColor="#ffc2b7"
28. android:angle="270" />
29. <stroke
30. android:width="2dp"
31. android:color="#dcdcdc" />
32. <corners
33. android:radius="2dp" />
34. <padding
35. android:left="10dp"
36. android:top="10dp"
37. android:right="10dp"
38. android:bottom="10dp" />
39. </shape>
40. </item>
41.
42. <item>
43. <shape>
44. <gradient
45. android:startColor="#ff9d77"
46. android:endColor="#ff9d77"
47. android:angle="270" />
48. <stroke
49. android:width="2dp"
50. android:color="#fad3cf" />
51. <corners
52. android:radius="2dp" />
53. <padding
54. android:left="10dp"
55. android:top="10dp"
56. android:right="10dp"
57. android:bottom="10dp" />
58. </shape>
59. </item>
60.</selector>
注意!提示大家,以上几个item的区别主要是体现在state_pressed按下或state_focused获
得焦点时,当当来判断显示什么类型,而没有state_xxx属性的item可以看作是常规状态下。