Chinaunix首页 | 论坛 | 博客
  • 博客访问: 550807
  • 博文数量: 179
  • 博客积分: 3845
  • 博客等级: 中校
  • 技术积分: 2003
  • 用 户 组: 普通用户
  • 注册时间: 2010-08-16 21:25
文章分类
文章存档

2012年(74)

2011年(105)

分类: 嵌入式

2011-10-19 16:28:02

Android中常常使用shape来定义控件的一些显示属性,今天看了一些shape的使用,对shape有了大体的了解,稍作总结:
先看下面代码:
  1. 01.<shape>
  2. 02. <!-- 实心 -->
  3. 03. <solid android:color="#ff9d77"/>
  4. 04. <!-- 渐变 -->
  5. 05. <gradient
  6. 06. android:startColor="#ff8c00"
  7. 07. android:endColor="#FFFFFF"
  8. 08. android:angle="270" />
  9. 09. <!-- 描边 -->
  10. 10. <stroke
  11. 11. android:width="2dp"
  12. 12. android:color="#dcdcdc" />
  13. 13. <!-- 圆角 -->
  14. 14. <corners
  15. 15. android:radius="2dp" />
  16. 16. <padding
  17. 17. android:left="10dp"
  18. 18. android:top="10dp"
  19. 19. android:right="10dp"
  20. 20. android:bottom="10dp" />
  21. 21.</shape>
  22. .
solid:实心,就是填充的意思
android:color指定填充的颜色

gradient:渐变
android:startColor和android:endColor分别为起始和结束颜色,ndroid:angle是渐变角度,必须为45的整数倍。
另外渐变默认的模式为android:type="linear",即线性渐变,可以指定渐变为径向渐变,android:type="radial",径向渐变需要指定半径android:gradientRadius="50"。

stroke:描边
android:width="2dp" 描边的宽度,android:color 描边的颜色。
我们还可以把描边弄成虚线的形式,设置方式为:
android:dashWidth="5dp"

android:dashGap="3dp"
其中android:dashWidth表示'-'这样一个横线的宽度,android:dashGap表示之间隔开的距离。

corners:圆角
android:radius为角的弧度,值越大角越圆。
我们还可以把四个角设定成不同的角度,方法为:
  1. 01.<corners
  2. 02.
  3. 03. android:topRightRadius="20dp" 右上角
  4. 04. android:bottomLeftRadius="20dp" 右下角
  5. 05. android:topLeftRadius="1dp" 左上角
  6. 06. android:bottomRightRadius="0dp" 左下角
  7. 07./>
  8. .
这里有个地方需要注意,bottomLeftRadius是右下角,而不是左下角,这个有点郁闷,不过不影响使用,记得别搞错了就行。
还有网上看到有人说设置成0dp无效,不过我在测试中发现是可以的,我用的是2.2,可能修复了这个问题吧,如果无效的话那就只能设成1dp了。

padding:间隔
这个就不用多说了,XML布局文件中经常用到。


大体的就是这样,以下是一个使用的具体示例:用在Selector中作为Button的背景,分别定义了按钮的一般状态、获得焦点状态和按下时的状态,具体代码如下:
  1. 01.main.xml:
  2. 02.<Button
  3. 03. android:layout_width="wrap_content"
  4. 04. android:layout_height="wrap_content"
  5. 05. android:text="TestShapeButton"
  6. 06. android:background="@drawable/button_selector"
  7. 07. />
  8. 08.>
button_selector.xml:
  1. 01.<?xml version="1.0" encoding="utf-8"?>
  2. 02.<selector
  3. 03. xmlns:android="">
  4. 04. <item android:state_pressed="true" >
  5. 05. <shape>
  6. 06. <!-- 渐变 -->
  7. 07. <gradient
  8. 08. android:startColor="#ff8c00"
  9. 09. android:endColor="#FFFFFF"
  10. 10. android:type="radial"
  11. 11. android:gradientRadius="50" />
  12. 12. <!-- 描边 -->
  13. 13. <stroke
  14. 14. android:width="2dp"
  15. 15. android:color="#dcdcdc"
  16. 16. android:dashWidth="5dp"
  17. 17. android:dashGap="3dp" />
  18. 18. <!-- 圆角 -->
  19. 19. <corners
  20. 20. android:radius="2dp" />
  21. 21. <padding
  22. 22. android:left="10dp"
  23. 23. android:top="10dp"
  24. 24. android:right="10dp"
  25. 25. android:bottom="10dp" />
  26. 26. </shape>
  27. 27. </item>
  28. 28. <item android:state_focused="true" >
  29. 29. <shape>
  30. 30. <gradient
  31. 31. android:startColor="#ffc2b7"
  32. 32. android:endColor="#ffc2b7"
  33. 33. android:angle="270" />
  34. 34. <stroke
  35. 35. android:width="2dp"
  36. 36. android:color="#dcdcdc" />
  37. 37. <corners
  38. 38. android:radius="2dp" />
  39. 39. <padding
  40. 40. android:left="10dp"
  41. 41. android:top="10dp"
  42. 42. android:right="10dp"
  43. 43. android:bottom="10dp" />
  44. 44. </shape>
  45. 45. </item>
  46. 46. <item>
  47. 47. <shape>
  48. 48. <solid android:color="#ff9d77"/>
  49. 49. <stroke
  50. 50. android:width="2dp"
  51. 51. android:color="#fad3cf" />
  52. 52. <corners
  53. 53. android:topRightRadius="5dp"
  54. 54. android:bottomLeftRadius="5dp"
  55. 55. android:topLeftRadius="0dp"
  56. 56. android:bottomRightRadius="0dp"
  57. 57. />
  58. 58. <padding
  59. 59. android:left="10dp"
  60. 60. android:top="10dp"
  61. 61. android:right="10dp"
  62. 62. android:bottom="10dp" />
  63. 63. </shape>
  64. 64. </item>
  65. 65.</selector>
  66. .

运行效果如下图:
一般状态:


获得焦点状态:


按下状态:


阅读(447) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~