Android: 如何使子视图重叠父视图?

11

我需要按照图片中的布局实现界面。父视图和兄弟视图在一个垂直的LinearLayout中。因此,我需要让一个子视图覆盖其父视图。这在安卓中能实现吗?

layout

6个回答

11

如果:

  1. siblingparent 的兄弟节点
  2. parent 是一个 ViewGroup
  3. 而你确实希望 child 成为 parent 的子节点

那么你可能考虑在 parent 上设置 android:clipChildren 为 false。


2

2

将它们全部包含在RelativeLayout中,记住绘制顺序是自上而下的,所以将最上面的视图放在XML定义的底部。


1
关于绘制顺序的信息很棒。你救了我免于疯狂。 - Cody

1
在我的情况下,我必须将android:clipChildren设置为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>

1
如果您使用RelativeLayout,应该没有问题实现这种效果。默认情况下,如果您不为其提供android:layout参数,它将在左上角堆叠所有子元素。因此,它肯定支持重叠的子元素。您只需要找出告诉它相对于其他东西在屏幕上放置子元素的最佳方法即可。

重叠的父级,没有子元素。 - Gilian

0

至少有两种布局可以实现这个功能。AbsoluteLayout和RelativeLayout。我建议您将视图放在RelativeLayout中,并使用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);

AbsoluteLayout在API级别3中已被弃用。 - Mark Cramer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接