Androidでプログラムでビューを作成しています。親レイアウトはRelativLlayout
であり、2つのビューを追加しています。最初はListView
で、2番目はカスタムビューです。 2番目のカスタムビューをリストの一番上に表示したいのですが、どういうわけかListView
の後ろに隠れています。カスタムビューが一番上にあることを確認するにはどうすればよいですか。
ビューは、親ビューに追加した順序で配置されます。最後に追加されたビューが一番上になります。 View.bringToFront()
http://developer.Android.com/reference/Android/view/View.html#bringToFront() を試すこともできます
使用してみてください:View.bringToFront();
ソリューション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);
FrameLayoutを使用すると、フレームレイアウトは最後に追加されたビューを上部に表示します。
これを試して :
<?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>
繰り返しますが、ビューは追加した順序でレイアウトに配置されます。質問は:それは本当に隠されているのか、それともレンダリングされないのか? LogCatとコンソールでエラーを確認します。この単一のカスタムビューのみをレイアウトに追加すると、問題なくレンダリングされますか?その場合は、ListViewを追加するときに、同じ親ビュー(グループ)にカスタムを本当に追加してください。それ以上得られない場合は、それぞれのコードサンプルを提供してください。
XMLのビューにAndroid:elevation
属性を追加してみてください。常にカスタムビューをListViewの上に配置します。
相対的なレイアウトを使用し、ビューの順序によって、どのレイアウトが一番上にあるかが決まります。
<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"/>
このレイアウトでは、テキストビューはシークバーの上にあります
親ビューを相対レイアウトにして、両方のビューを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();
これは私のために働く:
<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>
あなたがすべきことは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);
お役に立てれば