Drawing multiple shapes with ShapeDrawable in xml with Android Drawing multiple shapes with ShapeDrawable in xml with Android android android

Drawing multiple shapes with ShapeDrawable in xml with Android


Here's how I did a filled red circle with a one-pixel black border, with a white number 72 in the middle:

Create an XML file in res\drawable and name it appropriately, eg red_circle_black_border.xml

<?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="@android:color/black" />        </shape>    </item>    <item android:top="1dp" android:left="1dp" android:right="1dp" android:bottom="1dp">        <shape android:shape="oval">            <solid android:color="@android:color/red" />        </shape>    </item></layer-list>

Then, to use it in your layout, declare it as follows:

<TextView    android:text="72"    android:textSize="14dp"    android:textStyle="bold"    android:background="@drawable/red_circle_black_border"     android:layout_width="22dp"    android:layout_height="22dp"    android:gravity="center_vertical|center_horizontal"    android:textColor="@android:color/white" />

Obviously, change the textSize and layout_width/height as required :-)


I think I have found a solution to add multiple shapes to my xml file using Layer-list.I havent tried this yet but this seems t be exactly what I want as the shapes will be draw in the order of their array index.

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">   <item>      <shape>         <solid android:color="#FFF8F8F8" />      </shape>   </item>   <item android:top="23px">      <shape>         <solid android:color="#FFE7E7E8" />      </shape>   </item></layer-list>

Blog post

Android docs