13

Is it possible to show the first view in a LinearLayout overlapping the second?

I would like to layout my views like so:

<LinearLayout 
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:layout_alignParentRight="true" >

    <TextView
        android:id="@+id/firstTextView"
        android:layout_width="wrap_content"
        android:layout_height="wrapContent" />

    <TextView
        android:id="@+id/secondTextView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

</LinearLayout>

But I need my first view from the layout, firstTextView, to be placed on top of (overlapping) secondTextView. Is this possible? I am using the LinearLayout because I'm also playing with the margins to get an overlapping effect.

4

6 回答 6

9

对我有用并且可能对你有用的是:

  1. 用RelativeLayout而不是LinearLayout包装你的2个TextViews并设置android:clipChildren =“false”。这将防止重叠部分被剪裁。
  2. 将第二个 TextView 布局在第一个 TextView 下方
  3. 在代码中,在第一个 TextView 上调用 bringToFront()。默认情况下,首先绘制第一个 textview 并将在第二个 textview 下方。调用 bringToFront() 将更改该顺序。

所以布局可以是这样的:

<RelativeLayout  
xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical" 
android:clipChildren="false">

<TextView
    android:id="@+id/firstTextView"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="#00000000"
    android:text="First View" />

<TextView
    android:id="@+id/secondTextView"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@id/firstTextView"
    android:background="#00000000"
    android:layout_marginTop="-13dp"
    android:text="Second View"/>
</RelativeLayout>

和:

TextView firstTextView = (TextView)findViewById(R.id.firstTextView);
firstTextView.bringToFront();
于 2014-10-16T01:51:52.310 回答
7

如果您只想垂直重叠两个视图,请使用以下 XML:

<LinearLayout  
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/firstTextView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="#00000000"
        android:text="First View" />

    <TextView
        android:id="@+id/secondTextView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="#00000000"
        android:layout_marginTop="-13dp"
        android:text="Second View"/>
</LinearLayout>

在此处输入图像描述

于 2013-06-07T19:16:41.983 回答
3

或者您可以坚持使用线性布局,但在其中放置一个 RelativeLayout,作为一个孩子。您可以将 TextViews 与 RelativeLayout 放在一起,因此它们将从 RelativeLayout 继承属性。然后,您仍然可以将 LinearLayout 用于其他视图。 http://developer.android.com/reference/android/widget/RelativeLayout.html

于 2013-06-06T22:46:11.060 回答
0

安卓系统给你一个改变孩子绘画顺序的入口。

  1. 定义一个名为 ReverseDrawingOrderLLayout 的自定义 LinearLayout
  2. 启用isChildrenDrawingOrderEnabled = true
  3. 覆盖getChildDrawingOrder以更改孩子的绘图顺序
  4. 将您的布​​局放入 ReverseDrawingOrderLLayout

在此处输入图像描述

    <com.example.widget.ReverseDrawingOrderLLayout

        android:layout_width="wrap_content"
        android:layout_height="wrap_content">

        <TextView
            android:layout_marginRight="-10dp"
            android:background="@color/b_normal"
            android:layout_width="120dp"
            android:layout_height="100dp" />

        <TextView
            android:background="@color/r_normal"
            android:layout_marginTop="10dp"
            android:layout_marginRight="-10dp"
            android:layout_width="120dp"
            android:layout_height="100dp" />

        <TextView
            android:background="@color/g_normal"
            android:layout_marginTop="20dp"
            android:layout_width="120dp"
            android:layout_height="100dp" />
    </com.example.widget.ReverseDrawingOrderLLayout>

结果 结果

于 2022-01-13T02:59:52.927 回答
0

通过分配边距值“<0”,我们可以重叠视图。但是当我们需要重叠视图时,相对布局更可取。

于 2015-12-22T05:26:20.563 回答
0

我知道这是一个老问题,但如果有人像今天一样再次寻找这个问题 - 我有一个动态构建布局,所以我并没有一个特定的 xml,而是一个我想添加到堆栈顶部的单独视图取决于某些设置;@GabeSechan 的评论让我朝着正确的方向前进,我使用 -bottom margin 来提升第二个视图,在位置 0 插入新视图

LinearLayout stack = (LinearLayout) findViewById(R.id.mystackview);//get your stack

stack.addView(getView(count), 0); //place it at the top

public View getView(){
        TextView view = menuLayout.findViewById(R.id.myview);

    LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(size, size);
    layoutParams.setMargins(0, 0, 0, -size));//this pulls the view back up to overlap evenly
    layoutParams.setMarginEnd(0);
    layoutParams.setMarginStart(size);

    if (view.getParent() != null)
        ((ViewGroup) view.getParent()).removeView(view);
    view.setLayoutParams(layoutParams);
    view.setZ(1);//this then sets the zindex above the other layout and hey presto, almost a simple css style fix

    return view;
}
于 2019-03-25T15:43:34.163 回答