Android Drawable Kotlin DSL
DSL for constructing the drawables in Kotlin instead of in XML
Examples
Shape drawables
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval">
<solid android:color="#199fff" />
<stroke
android:width="2dp"
android:color="#444444" />
</shape>
replace it with
shapeDrawable {
shape = GradientDrawable.OVAL
solidColor = Color.parseColor("#199fff")
stroke {
width = dip(2)
color = Color.parseColor("#444444")
}
}
State selectors
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_checked="true">
<shape>
<solid android:color="@android:color/black" />
</shape>
</item>
<item android:state_pressed="true">
<shape>
<solid android:color="@android:color/holo_red_dark" />
</shape>
</item>
<item>
<shape>
<solid android:color="@android:color/white" />
</shape>
</item>
</selector>
replace it with
stateListDrawable {
checkedState {
shapeDrawable {
solidColor = Color.BLACK
}
}
pressedState {
shapeDrawable {
solidColor = Color.RED
}
}
defaultState {
shapeDrawable {
solidColor = Color.WHITE
}
}
}
Layer drawables
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape android:shape="oval">
<stroke
android:width="5dp"
android:color="#000000" />
</shape>
</item>
<item>
<shape android:shape="oval">
<stroke
android:width="2dp"
android:color="#ffffff" />
</shape>
</item>
</layer-list>
replace it with
layerDrawable(
shapeDrawable {
shape = GradientDrawable.OVAL
stroke {
width = ctx.dip(5)
color = Color.parseColor("#000000")
}
},
shapeDrawable {
shape = GradientDrawable.OVAL
stroke {
width = ctx.dip(2)
color = Color.parseColor("#ffffff")
}
}
)
Install
repositories {
maven { url 'https://jitpack.io' }
}
compile "com.github.infotech-group:android-drawable-dsl:0.3.0"
Contribute
We haven't covered 100% of the XML DSL, contributions are very welcome
Please write a test for every new tag you add, we (hopefully) made it easy to do