Android Button 原理
2010-11-05 00:56:20 来源:WEB开发网8. < item name="android:gravity">center_vertical|center_horizontal< /item>
9. < /style>
这里定义了好多style相关的属性,其他的属性都好理解,这个backgroud属性难道仅仅是一个drawable图片?如果仅仅是一个图片的化,怎么能够实现button各种状态下表现出不同背景的功能呢?还是来看看这个drawable到底是什么东西。
到drwable目录中发现这个btn_default原来也是一个xml文件,内容如下:
1. < selector xmlns:android="http://schemas.android.com/apk/res/android">
2. ? < item android:state_window_focused="false" android:state_enabled="true"
3. android:drawable="@drawable/btn_default_normal" />
4. ? < item android:state_window_focused="false" android:state_enabled="false"
5. android:drawable="@drawable/btn_default_normal_disable" />
6. < item android:state_pressed="true"
7. android:drawable="@drawable/btn_default_pressed" />
8. < item android:state_focused="true" android:state_enabled="true"
9. android:drawable="@drawable/btn_default_selected" />
10. < item android:state_enabled="true"
11. android:drawable="@drawable/btn_default_normal" />
12. < item android:state_focused="true"
13. android:drawable="@drawable/btn_default_normal_disable_focused" />
14. < item
15. android:drawable="@drawable/btn_default_normal_disable" />
16. < /selector>
其实drawable在Android中有很多种,最普通的就是一个图片。而这里用到的是StateListDrawable。当Android的解析器解析到上面的xml时,会自动转化成一个StateListDrawable类的实例。这个类的一些核心代码如下:
1. public class StateListDrawable extends DrawableContainer {
2. public StateListDrawable()
3. {
4. this(null);
5. }
6.
7. /**
8. * Add a new image/string ID to the set of images.
更多精彩
赞助商链接