Skip to content Skip to sidebar Skip to footer

How To Get Gravity 'bottom' Working On A Drawable In Xml

I have a simple aim. I want a light grey background on my FrameLayout with a black dividing line underneath it (only undernearth, not all around). So far I have this:

Solution 1:

I've struggled a lot with this as well. Basically, to create a border at the bottom, you have to think in opposite direction from what you expect. You start with a rectangle with your Border color. On top of that, you draw the actual color, with an offset from the bottom. I use this:

<?xml version="1.0" encoding="utf-8"?><layer-listxmlns:android="http://schemas.android.com/apk/res/android" ><!-- CREATE A RECTANGLE WITH YOUR BORDER COLOR --><item><shapeandroid:shape="rectangle" ><solidandroid:color="#fff"/></shape></item><!-- NOW DEFINE THE NORMAL COLOR--><itemandroid:bottom="BOTTOM_BORDER_THICKNESS E.G. 4dp"><shapeandroid:shape="rectangle" ><solidandroid:color="#ccc"/></shape></item></layer-list>

Or, as Juan Pablo Saraceno suggested :

<layer-listxmlns:android="http://schemas.android.com/apk/res/android" ><item><colorandroid:color="YOUR_BORDER_COLOR" /></item><itemandroid:top="YOUR_BORDER_THICKNESS"><colorandroid:color="YOUR_BG_COLOR" /></item></layer-list>

Solution 2:

Unfortunately I have not found a way to get the gravity working for drawables, but I found how you can achieve what you want with pure xml:

<?xml version="1.0" encoding="utf-8"?><layer-listxmlns:android="http://schemas.android.com/apk/res/android"><itemandroid:top="-2dp"android:left="-2dp"android:right="0dp"android:bottom="1dp"
        ><shapeandroid:shape="rectangle"><solidandroid:color="#EEEEEE"/><strokeandroid:width="1dp"android:color="#010101"/></shape></item></layer-list>

Good luck:)

Solution 3:

I'd recommend using a nine-patch image for this - here's an example that should do the job:

Example nine-patch image

(It's only tiny but it is there!) If you place this in your drawable folder and set your FrameLayout's background to it then you should get the desired result. The content will go in the grey area and the #010101 pixel will be stretched horizontally to form a line at the bottom. Just make sure to keep the .9.png extension to ensure it gets loaded as a nine-patch.

Hope that helps you

Solution 4:

This works!

<item><bitmapandroid:gravity="left|bottom"android:src="@drawable/myDrawable" /></item>

Solution 5:

I know it's pretty old question but given answers didn't work for me. Turns out in order to gravity property work you just need to add size tag in drawable item.

So following will work as expected:

<?xml version="1.0" encoding="utf-8"?><layer-listxmlns:android="http://schemas.android.com/apk/res/android"><itemandroid:gravity="center"><shapeandroid:shape="rectangle"><solidandroid:color="#EEEEEE" /></shape></item><itemandroid:gravity="bottom"><shapeandroid:shape="line"><sizeandroid:height="2dp"/><strokeandroid:width="1dip"android:color="#010101"/></shape></item></layer-list>

ps. this feature added in api level 23 https://developer.android.com/reference/android/graphics/drawable/LayerDrawable#setLayerGravity%28int,%20int%29

Post a Comment for "How To Get Gravity 'bottom' Working On A Drawable In Xml"