web-dev-qa-db-fra.com

Comment mettre une vue par-dessus une autre dans RelativElayout par programme dans Android?

Je crée par programme une vue dans Android . La disposition parent est RelativLlayout et j'y ajoute deux vues. La première est ListView et la deuxième est la vue personnalisée. Je souhaite que ma deuxième vue personnalisée arrive en tête de liste, mais elle est en train de se cacher derrière la ListView. Comment puis-je m'assurer que ma vue personnalisée est au top.

30
Chimu

Les vues sont placées dans l'ordre dans lequel vous les ajoutez à leurs vues parent. La vue ajoutée en dernier sera au top. Vous pouvez également essayer View.bringToFront()http://developer.Android.com/reference/Android/view/View.html#bringToFront ()

31
Megan Scott

Essayez d'utiliser: View.bringToFront(); 

12
onur taskin

Solution 1 - Voir # bringToFront ()View.bringToFront() devrait fonctionner s'il était utilisé correctement. Peut-être avez-vous oublié ceci (source: http://developer.Android.com/reference/Android/view/View.html#bringToFront () ):

Avant KitKat, cette méthode devrait être suivie d'appels à requestLayout () et invalidate () 

Solution 2 - Refixez la vue

Si View.bringToFront() ne fonctionnera pas, essayez de supprimer et d'ajouter de nouveau la vue. L'avantage est qu'il a le même code sur les versions antérieures à KitKat.

Je le fais de cette façon dans mon code:

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

Utilisez FrameLayout, la disposition du cadre montre la dernière vue ajoutée en haut.

5
MohsinSyd

Essaye ça : 

   <?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

Encore une fois: les vues sont placées dans la mise en page dans l'ordre dans lequel vous l'ajoutez. La question est: est-il vraiment caché ou ne rend-il pas?. Recherchez les erreurs dans LogCat et la console. Si vous ajoutez uniquement cette vue personnalisée unique à votre mise en page, le rendu est-il effectué sans aucun problème? Si tel est le cas, assurez-vous d’ajouter réellement votre personnalisation à la même vue parent (groupe), tout en ajoutant votre ListView. Si vous n'allez pas plus loin, fournissez un exemple de code.

1
Megan Scott

J'ai utilisé la disposition relative et l'ordre des vues détermine en quelque sorte laquelle se trouve 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 mise en page, la vue de texte sera au-dessus de la barre de recherche

0
code

Créez la vue parent en tant que disposition relative et ajoutez vos deux vues au format xml.Il ne fonctionnera pas pour la disposition linéaire . Et ajoutez ensuite FirstView.bringToFront () par programmation.

<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

Cela fonctionne 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="[email protected]"/>
 </LinearLayout>
 </RelativeLayout>
0
Kapil Rajput

ce que vous devriez faire, c'est utiliser Android:layout_below ou Android:layout_above par programmation. alors vous devriez 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 jetez un oeil à cette réponse

j'espère que cela t'aides

0
pouya