android:如何让子视图与父视图重叠?

时间:2011-03-21 16:11:44

标签: android layout parent-child

我需要实现图片中的布局。 Parent和Sibling位于垂直LinearLayout中。所以我需要创建一个子视图来重叠它的父级。我可以在android中做到这一点吗?

layout

6 个答案:

答案 0 :(得分:7)

如果:

  1. 兄弟父母的兄弟
  2. ViewGroup
  3. 你真的希望孩子成为父母的孩子
  4. 那么也许您可以考虑在上将android:clipChildren设置为false。

答案 1 :(得分:2)

我实际上只是在看一个FrameLayout的示例,它将TextView覆盖在ImageView之上。因此,显然有多种方法可以完成它。你的下一个问题可能是哪一个最好...我不知道,但这里有一个人可能:

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

答案 2 :(得分:2)

只需在RelativeLayout中包含它们,并记住绘制顺序是从上到下,所以将最顶层的视图放在XML定义的底部。

答案 3 :(得分:1)

如果你使用RelativeLayout,你应该没有问题达到这个效果。默认情况下,如果你没有为它们提供android:layout参数,它会将它的所有子节点叠加在左上角。所以它肯定会支持重叠的孩子。你只需要找出最好的方法告诉孩子应该在屏幕上相对于其他东西的位置。

答案 4 :(得分:0)

至少有两种布局可以做到这一点。 AbsoluteLayout和RelativeLayout。我建议您将视图放在RelativeLayout中,并使用LayoutParams添加它们,这些LayoutParams指定它们在父项的顶部和左侧的偏移量:

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);

答案 5 :(得分:0)

在我的情况下,我必须将android:clipCildren设置为父级的父级上的false

<?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>