在LinearLayout上方的第一个视图/重叠的第二个视图

时间:2013-06-06 22:31:29

标签: android android-linearlayout overlap view-hierarchy

是否可以在LinearLayout中显示与第二个重叠的第一个视图?

我想像我这样布置我的观点:

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

但是我需要从布局中的第一个视图firstTextView放置在(重叠)secondTextView的顶部。这可能吗?我正在使用LinearLayout,因为我也在使用边距来获得重叠效果。

5 个答案:

答案 0 :(得分:5)

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

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

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

答案 1 :(得分:4)

如果你想要的是垂直重叠两个视图,那么使用这个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>

enter image description here

答案 2 :(得分:2)

或者你可以坚持使用线性布局,但在孩子身上放置一个RelativeLayout。您可以将TextViews与RelativeLayout放在一起,这样它们就可以从RelativeLayout中获取属性。然后,您仍然可以将LinearLayout用于其他视图。 http://developer.android.com/reference/android/widget/RelativeLayout.html

答案 3 :(得分:0)

通过指定边距值“&lt; 0”,我们可以重叠视图。但是当我们需要o重叠视图时,相对布局是可取的。

答案 4 :(得分:0)

我知道这是一个老问题,但是如果有人像我今天一样再次寻找这个问题-我有一个动态构建布局,所以我实际上没有特定的xml,而是想在ontop上添加一个单独的视图我的堆栈取决于某些设置; @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;
}