如果你对Android系统自带的UI控件感觉不够满意,可以尝试下自定义控件,我们就以Button为例,很早以前Android就写到过Android Button按钮控件美化方法里面提到了xml的selector构造。当然除了使用drawable这样的图片外今天eoeAndroid谈下自定义图形shape的方法,对于Button控件Android上支持以下几种属性shape、gradient、stroke、corners等。

我们就以目前系统的Button的selector为例说下:

Java代码:

XML/HTML代码
  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代码:

XML/HTML代码
  1. <?xmlversion="1.0"encoding="utf-8"?>
  2. <selector
  3. xmlns:android="http://schemas.android.com/apk/res/android">
  4. <itemandroid: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. <itemandroid:state_focused="true">
  23. <shape>
  24. <gradient
  25. android:startColor="#ffc2b7"
  26. android:endColor="#ffc2b7"
  27. android:angle="270"/>
  28. <stroke
  29. android:width="2dp"
  30. android:color="#dcdcdc"/>
  31. <corners
  32. android:radius="2dp"/>
  33. <padding
  34. android:left="10dp"
  35. android:top="10dp"
  36. android:right="10dp"
  37. android:bottom="10dp"/>
  38. </shape>
  39. </item>
  40. <item>
  41. <shape>
  42. <gradient
  43. android:startColor="#ff9d77"
  44. android:endColor="#ff9d77"
  45. android:angle="270"/>
  46. <stroke
  47. android:width="2dp"
  48. android:color="#fad3cf"/>
  49. <corners
  50. android:radius="2dp"/>
  51. <padding
  52. android:left="10dp"
  53. android:top="10dp"
  54. android:right="10dp"
  55. android:bottom="10dp"/>
  56. </shape>
  57. </item>
  58. </selector>





注意:以上几个item的区别主要是体现在state_pressed按下或state_focused获得焦点时,当当来判断显示什么类型,而没有state_xxx属性的item可以看作是常规状态下。

更多相关文章

  1. Android(安卓)TV 焦点控制
  2. Android中以JAR形式封装控件 或者类库
  3. Android与js交互实例
  4. Android动画机制与使用技巧
  5. RelativeLayout布局属性
  6. android select选择器 checkbox改外观,button按下状态
  7. Android分发机制
  8. Android与js交互实例
  9. Android:EditText 多行显示及所有属性(不自动弹出软键盘)

随机推荐

  1. Gradle中的常量
  2. 【Android(安卓)开发教程】保存到外部存
  3. 用kotlin写了一些android常用的一些工具
  4. Android(安卓)Gson深入分析
  5. Windows 环境下载 Android(安卓)源码
  6. Gradle???????
  7. Android扫描二维码及生成二维码Demo
  8. 窗口关系
  9. Android(安卓)文本转语音TextToSpeech (T
  10. Android(安卓)ApiDemos示例解析(177):Vie