Comment mettre une vue sur l'autre dans la mise en page relative programmatically dans android?
je suis en train de créer une vue sur android. Le layout Parent est un layout relatif et j'y ajoute deux vues. La première est list view et la seconde est custom view. Je veux que ma deuxième vue personnalisée arrive en haut de la liste, mais d'une certaine manière elle se cache derrière la vue Liste. Comment puis-je m'assurer que ma vue personnalisée est sur le dessus.
10 réponses
sont placées dans l'ordre où vous les ajoutez à leurs vues parentes. L'avis ajouté en dernier sera sur le dessus. Vous pourriez aussi vouloir essayer
View.bringToFront()
http://developer.android.com/reference/android/view/View.html#bringToFront ()
Solution 1-View#bringToFront ()
View.bringToFront()
devrait fonctionner s'il est utilisé correctement. Peut-être avez-vous oublié ceci (source: http://developer.android.com/reference/android/view/View.html#bringToFront () ):
avant KITKAT cette méthode doit être suivie d'appels à requestLayout () et invalider ()
Solution 2 - remettez vue
si View.bringToFront()
ne fonctionne pas essayer de supprimer et ajouter la vue à nouveau. L'avantage est qu'il a le même code sur les versions pré-KITKAT aussi.
je le fais de cette façon dans mon code:
ViewGroup parentView = (ViewGroup) (listView.getParent());
parentView.removeView(addFab);
parentView.addView(addFab);
utiliser FrameLayout, frame layout montre la dernière vue ajoutée sur le dessus..
essayez ceci:
<?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>
encore une fois: les vues sont placées sur la mise en page dans l'ordre où vous l'ajoutez. La Question Est: est-il réellement caché ou ne rend pas?. Vérifiez les erreurs LogCat et Console. Si vous ajoutez seulement cette vue personnalisée à votre mise en page, est-elle rendue sans aucun problème? Si c'est le cas, assurez-vous d'ajouter votre personnalisé à la même vue parent (group), que vous ajoutez votre ListView. Si vous n'obtenez pas plus, fournir de code échantillon respectif.
ça marche pour moi:
<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="kapil@gnxtsystems.com"/>
</LinearLayout>
</RelativeLayout>
j'ai utilisé la disposition relative et l'ordre des vues détermine en quelque sorte qui est en haut.
<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"/>
dans cette disposition, le textview sera en haut de la seekbar
Make parent view as relative layout and add your both view in xml.Il ne fonctionnera pas pour la disposition linéaire. Puis ajoutez FirstView.bringToFront () programtically.
<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();
ce que vous devez faire est d'utiliser android:layout_below
ou android:layout_above
programmatiquement. vous devriez donc faire ceci:
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);
et je vous suggère regardez cette réponse
espérons que cette aide