netimen
netimen

Reputation: 4427

android: how to make a child view overlap the parent?

I need to implement the layout as in the picture. Parent and Sibling are in a vertical LinearLayout. So I need to make a child view to overlap it's parent. Can I do that in android?

layout

Upvotes: 11

Views: 21552

Answers (6)

Sira Lam
Sira Lam

Reputation: 5367

In my case, I have to set android:clipCildren to be false on the parent of parent.

i.e.

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:clipChildren="false"
    android:id="@+id/parent1">

    <FrameLayout
        android:id="@+id/parent2"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_margin="64dp"
        android:background="@android:color/holo_blue_bright">

        <View
            android:id="@+id/This_is_the_view_I_want_to_overlap_parent2"
            android:layout_width="160dp"
            android:layout_height="80dp"
            android:layout_gravity="top|start"
            android:layout_marginTop="-40dp"
            android:background="#000000" />

    </FrameLayout>


</FrameLayout>

Upvotes: 4

Charlie Scott-Skinner
Charlie Scott-Skinner

Reputation: 375

Just contain them all within a RelativeLayout, and remember the draw order is top to bottom, so put the top most view on the bottom of the XML definition.

Upvotes: 2

bigstones
bigstones

Reputation: 15267

If:

  1. sibling is a sibling of parent
  2. parent is a ViewGroup
  3. and you really want child to be a child of parent

then maybe you could consider using android:clipChildren set to false on parent.

Upvotes: 12

Bill Mote
Bill Mote

Reputation: 12823

I was actually just looking at an example of a FrameLayout that had a TextView overlaid on top of an ImageView. So, there are obviously multiple ways to get it done. Your next question might be which one is best ... to that I have no idea, but here's a guy that might:

http://www.curious-creature.org/2009/03/01/android-layout-tricks-3-optimize-part-1/

Upvotes: 2

Vagrant
Vagrant

Reputation: 1716

There are at least two layouts that can do that. AbsoluteLayout and RelativeLayout. I suggest that you put your views in a RelativeLayout and add them with LayoutParams that specify their offset form the top and left of the parent:

RelativeLayout.LayoutParams rlp;
label = new TextView(ctx);
label.setBackgroundColor(0x00000000);
label.setTextColor(0xFF7ea6cf);
label.setTextSize(13);
label.setGravity(Gravity.LEFT);
label.setText("Examples:\n- Fentanyl\n- Dilaudid 2 mg PO q 4 hours prn moderate pain");
rlp = new RelativeLayout.LayoutParams(LayoutParams.FILL_PARENT,100);
rlp.topMargin=189;
rlp.leftMargin=30;
rlp.rightMargin=30;
rlParent.addView(label,rlp);

Upvotes: 0

FoamyGuy
FoamyGuy

Reputation: 46856

If you use a RelativeLayout you should have no problem achieving this effect. By default it will stack all of its children on top of each other in the top left corner if you don't supply them with android:layout parameters. So it will definitely support overlapping children. You'd just have to figure out what the best way to tell it where the child should go on the screen relative to something else.

Upvotes: 1

Related Questions