web-dev-qa-db-ja.com

AndroidでRelativElayoutのプログラムで1つのビューを別のビューに重ねる方法は?

Androidでプログラムでビューを作成しています。親レイアウトはRelativLlayoutであり、2つのビューを追加しています。最初はListViewで、2番目はカスタムビューです。 2番目のカスタムビューをリストの一番上に表示したいのですが、どういうわけかListViewの後ろに隠れています。カスタムビューが一番上にあることを確認するにはどうすればよいですか。

32
Chimu

ビューは、親ビューに追加した順序で配置されます。最後に追加されたビューが一番上になります。 View.bringToFront()http://developer.Android.com/reference/Android/view/View.html#bringToFront() を試すこともできます

32
Megan Scott

使用してみてください:View.bringToFront();

12
onur taskin

ソリューション1-View#bringToFront()View.bringToFront()は、適切に使用すれば機能するはずです。たぶんこれを忘れたかもしれません(ソース: http://developer.Android.com/reference/Android/view/View.html#bringToFront() ):

KitKatより前は、このメソッドの後にrequestLayout()およびinvalidate()を呼び出す必要があります

解決策2-ビューを再接続する

View.bringToFront()が機能しない場合は、ビューを削除して再度追加してください。利点は、KitKat以前のバージョンでも同じコードを使用できることです。

私は私のコードでこのようにしています:

ViewGroup parentView = (ViewGroup) (listView.getParent());
parentView.removeView(addFab);
parentView.addView(addFab);
6
Amio.io

FrameLayoutを使用すると、フレームレイアウトは最後に追加されたビューを上部に表示します。

5
MohsinSyd

これを試して :

   <?xml version="1.0" encoding="utf-8"?>
   <RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
     Android:layout_width="match_parent"
     Android:layout_height="match_parent" >

   <ListView
     Android:id="@+id/list"
     Android:layout_width="match_parent"
     Android:layout_height="match_parent" />

   <YourCustomView
     Android:layout_width="wrap_content"
     Android:layout_height="wrap_content"
     Android:layout_centerInParent="true" />

</RelativeLayout>
5
nikhil.thakkar

繰り返しますが、ビューは追加した順序でレイアウトに配置されます。質問は:それは本当に隠されているのか、それともレンダリングされないのか? LogCatとコンソールでエラーを確認します。この単一のカスタムビューのみをレイアウトに追加すると、問題なくレンダリングされますか?その場合は、ListViewを追加するときに、同じ親ビュー(グループ)にカスタムを本当に追加してください。それ以上得られない場合は、それぞれのコードサンプルを提供してください。

1
Megan Scott

XMLのビューにAndroid:elevation属性を追加してみてください。常にカスタムビューをListViewの上に配置します。

0

相対的なレイアウトを使用し、ビューの順序によって、どのレイアウトが一番上にあるかが決まります。

<RelativeLayout
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:layout_weight="1">
    <SeekBar
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        Android:splitTrack="false"
        Android:layout_alignParentTop="true"
    />
    <TextView
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:layout_alignParentTop="true"
        Android:layout_centerHorizontal="true"/>

このレイアウトでは、テキストビューはシークバーの上にあります

0
code

親ビューを相対レイアウトにして、両方のビューをxmlに追加します。リニアレイアウトでは機能しません。その後、FirstView.bringToFront()をプログラムで追加します。

<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:app="http://schemas.Android.com/apk/res-auto"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:background="@mipmap/bg"
Android:orientation="vertical"
Android:padding="15dp">


<ImageView
    Android:id="@+id/imgIcon"
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:layout_centerHorizontal="true"
    Android:layout_gravity="center"
    Android:layout_marginBottom="-30dp"
    Android:layout_marginTop="30dp"
    Android:src="@mipmap/login_logo" />

<LinearLayout
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:layout_below="@id/imgIcon"
    Android:layout_gravity="bottom"

    Android:background="#B3FFFFFF"
    Android:gravity="center"
    Android:orientation="vertical"
    Android:paddingLeft="10dp"
    Android:paddingRight="10dp">

<View 1/>
<View 2/>
</LinearLayout>

Java file
imgIcon.brigtToFront();
0
vikrant thakur

これは私のために働く:

<RelativeLayout
xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:app="http://schemas.Android.com/apk/res-auto"
Android:layout_width="match_parent"
Android:layout_height="220dp"
Android:gravity="bottom"
Android:orientation="vertical"
Android:theme="@style/ThemeOverlay.AppCompat.Dark">

<ImageView
    Android:id="@+id/details_wrapper"
    Android:layout_width="fill_parent"
    Android:layout_height="fill_parent"
    Android:orientation="vertical"
    Android:paddingBottom="16dip"
    Android:scaleType="centerCrop"
    Android:src="@drawable/temp_nav_image">
</ImageView>

<LinearLayout
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content"
    Android:layout_alignParentBottom="true"
    Android:paddingBottom="@dimen/activity_vertical_margin"
    Android:paddingLeft="@dimen/activity_horizontal_margin"
    Android:paddingRight="@dimen/activity_horizontal_margin"
    Android:paddingTop="@dimen/activity_vertical_margin"
    Android:orientation="vertical">

    <TextView
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        Android:paddingTop="@dimen/nav_header_vertical_spacing"
        Android:text="Kapil Rajput"
        Android:textStyle="bold"
        Android:textColor="@Android:color/black"
        Android:textAppearance="@style/TextAppearance.AppCompat.Body1"/>

    <TextView
        Android:id="@+id/textView"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:textColor="@Android:color/black"
        Android:textStyle="bold"
        Android:text="[email protected]"/>
 </LinearLayout>
 </RelativeLayout>
0
Kapil Rajput

あなたがすべきことはAndroid:layout_belowまたはAndroid:layout_aboveプログラムで。あなたはこれを行う必要があります:

RelativeLayout.LayoutParams params= new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,ViewGroup.LayoutParams.WRAP_CONTENT); 
params.addRule(RelativeLayout.BELOW, R.id.below_id);
viewToLayout.setLayoutParams(params);

この答えを見てください

お役に立てれば

0
pouya