• Stars
    star
    181
  • Rank 205,728 (Top 5 %)
  • Language
    Kotlin
  • License
    Apache License 2.0
  • Created about 7 years ago
  • Updated about 6 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

DSL for constructing the drawables in Kotlin instead of in XML

Android Drawable Kotlin DSL CircleCI

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