Can I use multiple shapes in one Android drawable?

30,644

Solution 1

Drawable accepts multiple shapes, (defined always in others files) if i understand your question maybe you can do a Layer drawable (this draws multiple underlying drawables on top of each other)

i write this here, so, i dont tested, but try this and read this fantastic documentation.

<?xml version="1.0" encoding="utf-8"?>
    <layer-list xmlns:android="http://schemas.android.com/apk/res/android">
        <item android:drawable="@drawable/shape_7"/>
        <item android:drawable="@drawable/shape_1"/>
    </layer-list>

the android complete xml resources

cheers

Solution 2

Use gravity to set your items in layer-list.

    for vertical orientation use:
    android:gravity="top"
    android:gravity="center"
    android:gravity="bottom"
    for horizontal orientation use:
    android:gravity="left"
    android:gravity="center"
    android:gravity="right"
<layer-list
           xmlns:android="http://schemas.android.com/apk/res/android">
          <item>
                <bitmap
                   android:src="@drawable/top_img"
                   android:gravity="top"/>
          </item>
          <item>
                <bitmap
                   android:src="@drawable/center_img"
                   android:gravity="center"/>
          </item>
          <item>
                <bitmap
                   android:src="@drawable/bottom_img"
                   android:gravity="bottom"/>
          </item>
</layer-list>

Be sure that the parent element has enough space to hold all the items! Otherwise they will overlap each other

Share:
30,644
David Brown
Author by

David Brown

Expert Web Developer Founder Tucanoo Solutions Ltd : https://www.tucanoo.com Grails Development Specialists

Updated on May 02, 2020

Comments

  • David Brown
    David Brown about 4 years

    What I'm trying to do is define a common background for use in a LinearLayout which frequents my application on many of its Activitys. This particular layout is a header that shows on the top of each activity.

    What I'm trying to do is create a drawable that fills the linearlayout with a gradient and has a horizontal line below the gradient.

    Does anyone know if this is possible or do I have to do this sort of thing only with nested layouts.

    My attemptat the drawable xml is

     <selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
    <shape xmlns:android="http://schemas.android.com/apk/res/android"
        android:shape="rectangle">
        <gradient android:startColor="#AA000000" android:endColor="#AA333333"
            android:angle="270" />
    </shape>
    </item>
    <item>
    <shape android:shape="line">
        <stroke android:width="3dp" android:color="#FFFFFFFF"
                android:dashWidth="1dp" android:dashGap="2dp" />
        <size android:height="5dp" />
    </shape>
    </item>
    </selector>