I have applied a shape for a button like:
My example is a circle button with state_pressed. code bellow:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true">
<shape android:shape="oval">
<solid android:color="@color/light_primary_color" />
</shape>
</item>
<item>
<shape android:shape="oval">
<solid android:color="@color/accent_color" />
</shape>
</item>
</selector>
shape.xml
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="@color/star_off"/>
<corners android:radius="5dp"/>
<padding android:left="0dp" android:top="0dp" android:right="0dp" android:bottom="0dp" />
</shape>
selector.xml
<selector xmlns:android="http://schemas.android.com/apk/res/android" android:exitFadeDuration="@android:integer/config_mediumAnimTime">
<item android:drawable="@color/tab_focused" android:state_focused="true" android:state_pressed="false"/>
<item android:drawable="@color/tab_pressed" android:state_pressed="true"/>
<item android:drawable="@drawable/shape"/>
</selector>
To be more reusable, you can set states on single properties. Avoid duplicating your shapes
<selector
xmlns:android="http://schemas.android.com/apk/res/android"
>
<item>
<shape android:shape="rectangle" >
<corners android:radius="5dp"/>
<solid
android:state_enabled="false"
android:color="@color/transparent"
/>
<solid
android:state_enabled="true"
android:color="@color/background"
/>
<stroke
android:width="@dimen/dividerHeight"
android:color="@color/dividerLight"
/>
</shape>
</item>
</selector>
I was able to set background programmatically once disabled using this method.