如果你对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:EditText 多行显示及所有属性(不自动弹出软键盘)
  2. Android中EditText属性
  3. Android的相对布局属性的解释
  4. Android editText(文本框) 的基本属性及用法:
  5. Android访问资源与属性之 ? , @
  6. 【Android开发学习27】界面控件之进度条(ProgressBar)

随机推荐

  1. [android警告] AndroidManifest.xml警告
  2. 搭建 Android(安卓)2.2 开发环境
  3. 跨平台移动开发 Android使用JPush推送消
  4. GridView的简单使用,带有点击事件
  5. LinearLayout水平居中控制
  6. Android(安卓)4高级编程(第3版)》
  7. Android(安卓)NDK学习教程(一)--第一个NDK
  8. Android用户界面 UI组件--自动提示输入框
  9. android 开机流程
  10. Android(安卓)使用 TableLayout 布局拉伸