XML drawable用起来方便灵活,并独立于屏幕像素密度,可以直接作为组件的background。
XML drawable包括:shape drawable、state list drawable和layer list drawable。
shape drawable使用方式,类似于下面代码:
//定义于res/drawable中,本例名称为button_beat_box_normal.xml
//可以指定形状和背景颜色
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval">
<solid android:color="@color/dark_blue"/>
</shape>
//同样,此例名称为button_beat_box_pressed.xml
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval">
<solid android:color="@color/red"/>
</shape>
在上面的基础上,看看state list drawable:
//状态不同则使用不同的drawable
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/button_beat_box_pressed"
android:state_pressed="true"/>
<item android:drawable="@drawable/button_beat_box_normal" />
</selector>
使用该drawable的方式类似于:
..........
<style name="BeatBoxButton" parent="android:style/Widget.Holo.Button">
<!--drawable直接被用于background-->
<item name="android:background">@drawable/button_beat_box</item>
</style>
..........
layer list drawable的使用方式类似如下,可以将不同item中的shape drawable叠加起来:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape android:shape="oval">
<solid android:color="@color/red"/>
</shape>
</item>
<item>
<shape android:shape="oval">
<stroke
android:width="4dp"
android:color="@color/gray"/>
</shape>
</item>
</layer-list>