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.

29
demandé sur Cœur 2013-05-20 12:56:02

10 réponses

Les vues

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

29
répondu Megan Scott 2013-05-20 09:14:37

essayez d'utiliser: View.bringToFront();

12
répondu onur taskin 2013-05-20 09:22:37

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);
6
répondu zatziky 2015-03-21 09:17:17

utiliser FrameLayout, frame layout montre la dernière vue ajoutée sur le dessus..

4
répondu MohsinSyd 2013-05-20 09:13:31

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>
4
répondu nikhil.thakkar 2013-05-20 11:51:56

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.

1
répondu Megan Scott 2013-05-21 05:21:32

ç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>
0
répondu Kapil Rajput 2016-12-07 12:52:42

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

0
répondu code 2017-05-18 02:35:27

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();
0
répondu vikrant thakur 2017-09-29 04:52:15

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

0
répondu pouya 2018-05-29 10:36:06