How to remove border only from one side of the element?

anony_root picture anony_root · May 13, 2012 · Viewed 16.7k times · Source

I have:

<stroke android:width="1px" android:color="#A6ACB1"/>

I'd like to remove this border from the bottom (for example) of the element. Is it possible? (Eclipse suggests me only: color, width, dashWidth and dashGap).

Answer

Juan Cort&#233;s picture Juan Cortés · May 13, 2012

As far as I understand it, there isn't an easy way of doing it. but if you use layer-list with an item that has the border and then one that doesn't with an offset from all the sides for which you want a border equal to the border width, you'd achieve that.

Let me make the xml for you representing the borderless bottom..

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
    <!-- Border -->
    <item>
        <shape>
            <solid android:color="#f000"></solid>
        </shape>
    </item>
    <!-- Body -->
    <item android:left="2dip"
          android:top="2dp"
          android:right="2dp">
        <shape>
            <solid android:color="#ffafafaf"></solid>
        </shape> 
    </item>
</layer-list>

As you can see, I'm telling the second item to be inset of the first one by two dp's on all sides except bottom (hence the no-border result on the bottom), there you go:

enter image description here

So essentially this isn't a border per-se, it's the shape from below (although you could add a border if you need dashed or dotted or whatever) being covered by a second item with would be the body of the button. All in the same drawable :)

This can be applied to any border you want to remove, by changing the values that the item is inset, for example, if I change the right in the Body item to bottom, the missing border would the right one since it's the one without the inset