web-dev-qa-db-ja.com

上の最初のビュー/ LinearLayoutの2番目のオーバーラップ

最初のビューを2番目のビューとオーバーラップする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を使用しています。

11
RileyE

私のために働いた、そしておそらくあなたのために働くだろうことはそれです:

  1. 2つのTextViewをLinearLayoutではなくRelativeLayoutでラップし、Android:clipChildren = "false"を設定します。これにより、重なり合う部分がクリップされるのを防ぎます。
  2. 最初のTextViewの下に2番目のTextViewをレイアウトします
  3. コードでは、最初のTextViewでbringToFront()を呼び出します。デフォルトでは、最初のテキストビューが最初に描画され、2番目のテキストビューの下に表示されます。 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();
7
Tony Vu

2つのビューを垂直方向にオーバーラップするだけの場合は、次の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

6
Voicu

または、線形レイアウトに固執することもできますが、子としてその中にRelativeLayoutを配置します。次に、RelativeLayoutを使用してTextViewを配置できるため、RelativeLayoutからプロパティを継承します。その後も、LinearLayoutを他のビューに使用できます。 http://developer.Android.com/reference/Android/widget/RelativeLayout.html

2
XxTIBZxX

マージン値「<0」を割り当てることにより、ビューをオーバーラップさせることができます。ただし、ビューをオーバーラップする必要がある場合は、相対レイアウトが適しています。

私はこれが古い質問であることを知っていますが、誰かが今日のようにこれを再び探している場合に備えて-私は動的にビルドレイアウトを持っているので、特定のxmlではなく、スタックの上に追加したい別のビューを持っています特定の設定に応じて; @GabeSechanのコメントにより、正しい方向に進むことができました。-bottommarginを使用して2番目のビューを表示し、新しいビューを位置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;
}
0
jameson2012