android - rectangle - shapedrawable

Shape Drawable Size not working (5)

For me, setting the gravity of the item to "center" solved the issue. For example:

<item android:id="@android:id/progress" android:gravity="center">
            <size android:height="2dp"/>
            <solid android:color="@color/my_color"/>

I have a very simple shape that I want to set the width of:

<shape android:shape="rectangle">
    <solid android:color="@color/orange"/>
    <size android:width="2dp"/>

However, when I assign this to the background of a EditText it just shows an orange background instead of a rectangle of width 2dp. Why isn't setting the size working? I want to create a transparent drawable with a orange rectangle on the left side. I also have this wrapped in a selector:

<selector xmlns:android="">
    <item android:state_focused="true">
        <shape android:shape="rectangle">
            <solid android:color="@color/orange"/>
            <size android:width="2dp" android:height="6dp"/>
        <shape android:shape="rectangle">
            <solid android:color="@android:color/transparent"/>

I've tried adding height just to see if it would change the size. It doesn't. It's like its completely ignoring the size. WTF?

I found the layer-list to be very devious for a first time Androider because of the following. At first glance most would think item top,bottom,right,left attributes are FROM the top,bottom,right,left. Where a value of the following:

<item android:top="10dp">

Would net you a starting point 10dp from the top of the respective container. This is not the case. Think of it as OFF OF the top,bottom,right,left. <item android:top="10dp"> will still net you a starting point 10dp OFF OF the top, but what happens when you want to set the bottom?

<item android:bottom="20dp">

This will not get you a bottom at 20dp from the TOP, rather a bottom of 20dp OFF OF the BOTTOM of the container.

So, for example with a 100dp container, if you wanted a rectangle with a top edge starting at 20dp and a bottom edge at 40dp:

<item android:top="20" android:bottom="60dp">

It can work with a foreground. It seems like you can't set a background's gravity. But you can on a foreground. I checked API 21, 23 and 24 (well, with the Studio design preview) and the following places a solid circle dot on the ImageView.

<shape android:shape="oval" xmlns:android="">
    <solid android:color="@color/colorPrimary" />
    <size android:height="8dp" android:width="8dp" />

With the layout snippet


UPDATE: While it appears to work in the layout design tool, it doesn't look the same in the emulator. UPDATE 2: Since this answer has a few votes, you might want to check what I actually used in order to show a new indicator dot:

Just to specify the user983447's answer - the size attribute does really mean a proportion. You should set the size for all shapes in your layer-list and it'll be used a as a proportion when scaling - like the layout_weight attribute of LinearLayout. So it's better to name it not a size but a weight

Below is a work-around how to implement top and bottom white lines without using the size attribute:

<layer-list xmlns:android="">
            <solid android:color="#fff" />
    <item android:top="1dp" android:bottom="1dp">
            <solid android:color="#888" />

used this.

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android=""
android:shape="rectangle" >

    android:width="1dip" />

    android:topRightRadius="0.1dip" />

<solid android:color="@color/White" />


put this rectangle.xml to drawable.and set your view background.