Search code examples
androidoverlappingandroid-relativelayout

Can't get a good overlapping with RelativeLayout


I would like to do a presentation like this : (done with Gimp) Good part is with 03 sept.

And for the moment I only get something like this : Bad result

My layout xml file is for the moment like this :

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/itemRoot"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingBottom="4sp"
android:orientation="vertical">
<LinearLayout
    android:id="@+id/bigbox"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_marginTop="20px"
android:background="#caced4"
android:clipChildren="false"
android:onClick="itemClicked">
    <RelativeLayout
    android:id="@+id/box"
    android:layout_marginTop="-10px"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    >
        <TableLayout android:id="@+id/TableLayout01"
        android:layout_width="40dip" 
        android:layout_height="40dip"
        android:background="@drawable/corner"
        >
        <TextView android:text="03 sept."
        android:background="#424e5f" 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="3px"
        android:layout_marginBottom="3px"
        android:layout_marginRight="3px"
        android:layout_marginTop="3px"
        android:id="@+id/itemPubdate" 
        android:gravity="center" android:textStyle="bold"/>
        </TableLayout>
    </RelativeLayout>
    <LinearLayout 
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:paddingLeft="4sp">
        <TextView android:id="@+id/itemTitle"
        android:text="Arrêtez moi ces répondeurs d'email"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:maxLines="2"
        android:textColor="#424e5f"
        android:textSize="13sp"
        android:textStyle="bold"/>
        <TextView android:id="@+id/itemDescription"
        android:text="Qui, suite à l'envoi d'un email, n'a pas reçu etc."
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textColor="#000000"
        android:maxLines="3"
        android:textSize="11sp"/>
    </LinearLayout>
</LinearLayout>

I have tried many combinaisons with android:clipChildren="false" without any good result .. If someone have a solution for this ... that will help me so much.

Thanks,


Solution

  • You could also try a simplified layout, like:

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/itemRoot" android:layout_width="match_parent"
        android:layout_height="wrap_content" android:paddingBottom="4sp">
        <LinearLayout android:paddingLeft="45dip" android:background="#caced4"
            android:layout_width="fill_parent" android:layout_height="wrap_content" 
            android:orientation="vertical" android:layout_marginTop="10dp"
            android:clipChildren="false" android:onClick="itemClicked">
            <TextView android:id="@+id/itemTitle"
                android:text="Arrêtez moi ces répondeurs d'email"
                android:layout_width="wrap_content" android:layout_height="wrap_content" 
                android:maxLines="2" android:textColor="#424e5f" android:textSize="13sp"
                android:textStyle="bold" />
            <TextView android:id="@+id/itemDescription"
                android:text="Qui, suite à l'envoi d'un email, n'a pas reçu etc."
                android:layout_width="wrap_content" android:layout_height="wrap_content" 
                android:textColor="#000000" android:maxLines="3" android:textSize="11sp" />
        </LinearLayout>
        <TableLayout android:id="@+id/TableLayout01" android:background="@drawable/corner"
            android:layout_width="40dip" android:layout_height="40dip">
            <TextView android:id="@+id/itemPubdate" android:text="03 sept."
                android:background="#424e5f" android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginLeft="3px" android:layout_marginBottom="3px"
                android:layout_marginRight="3px" android:layout_marginTop="3px"
                android:gravity="center" android:textStyle="bold" />
        </TableLayout>
    </RelativeLayout>
    

    or thinking a bit more about it, take the full advantage of the RelativeLayout.
    That would contain only your calendar-item (TableLayout), and the two TextViews, but for this you'd probably need a custom drawable (a simple solid-colored one with an android:top="10dp" set.

    Update:
    With RelativeLayout and two custom drawables (from which one you already partially have: corner), you can achieve this layout:

    overlapping layout sample

    For such a result you need the
    row_layout.xml:

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/itemRoot" android:layout_width="match_parent"
        android:layout_height="wrap_content" android:padding="4sp"
        android:background="@drawable/overlap" android:onClick="itemClicked">
        <TextView android:id="@+id/itemPubdate" android:text="03 sept."
            android:background="@drawable/overlap_calendar" 
            android:layout_width="40dip" android:layout_height="40dip"
            android:gravity="center" android:textStyle="bold" />
        <TextView android:id="@+id/itemTitle" android:paddingLeft="5sp"
            android:text="Arrêtez moi ces répondeurs d'email"
            android:layout_width="wrap_content" android:layout_height="wrap_content" 
            android:maxLines="2" android:textColor="#424e5f" android:textSize="13sp"
            android:textStyle="bold" android:ellipsize="end"
            android:layout_toRightOf="@id/itemPubdate" android:paddingTop="10dp"/>
        <TextView android:id="@+id/itemDescription" android:paddingLeft="5sp"
            android:text="Qui, suite à l'envoi d'un email, n'a pas reçu etc."
            android:layout_width="wrap_content" android:layout_height="wrap_content" 
            android:textColor="#000000" android:maxLines="3" android:textSize="11sp"
            android:layout_toRightOf="@id/itemPubdate"
            android:layout_below="@id/itemTitle" />
    </RelativeLayout>
    

    and the two referenced drawables
    res/drawable/overlap.xml:

    <?xml version="1.0" encoding="UTF-8"?>
    <layer-list xmlns:android="http://schemas.android.com/apk/res/android">
        <item android:top="10dp" android:bottom="2dp" android:left="2dp" 
            android:right="2dp">
            <shape>
                <solid android:color="#caced4" />
                <stroke android:width="3dp" color="#caced4" />
                <padding android:left="2dp" android:top="2dp" android:right="2dp"
                    android:bottom="2dp" />
            </shape>
        </item>
    </layer-list>
    

    and res/drawable/overlap_calendar.xml:

    <?xml version="1.0" encoding="utf-8"?>
    <layer-list xmlns:android="http://schemas.android.com/apk/res/android">
        <item>
            <shape android:shape="rectangle">
                <solid android:color="#f0f0f0" />
                <corners android:bottomRightRadius="3dp"
                    android:bottomLeftRadius="3dp" android:topLeftRadius="3dp"
                    android:topRightRadius="3dp" />
            </shape>
        </item>
        <item android:top="2dp" android:left="2dp" android:right="2dp"
            android:bottom="2dp">
            <shape android:shape="rectangle">
                <solid android:color="#424e5f" />
                <corners android:bottomRightRadius="3dp"
                    android:bottomLeftRadius="3dp" android:topLeftRadius="3dp"
                    android:topRightRadius="3dp" />
            </shape>
        </item>
    </layer-list>