web-dev-qa-db-fra.com

z-index dans la mise en page relative

J'ai besoin de placer un TextView au-dessus du bouton dans RelativeLayout. Mais cela ne fonctionne pas: TextView est toujours sous le bouton, même si je le déplace avant le bouton. J'ai aussi essayé la fonction bringChildToFront() pour déplacer textview à l'avant, mais pas de chance.

<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:id="@+id/rlBottom"
Android:layout_width="fill_parent"
Android:layout_height="match_parent">

<Button
    Android:id="@+id/bVio"
    Android:layout_width="wrap_content"
    Android:layout_height="50dip"
    Android:layout_alignParentLeft="true"
    Android:text="VIO"></Button>

    <TextView
        Android:id="@+id/bVio_count"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:layout_alignRight="@+id/bVio"
        Android:layout_marginTop="6dip"
        Android:layout_marginRight="6dip"
        Android:text="00"
        Android:textSize="15dip"
        Android:textColor="#FF0000"/>
</RelativeLayout>
13
Evgeny Borzenkov

Je suis tombé sur cette question un peu tard, mais voici comment je l’ai résolue. 

Le problème se produit sur Android avec une API de niveau 21 (Lollipop/Android 5.0) et au-dessus lorsque vous travaillez avec des éléments ayant une élévation, tels que le bouton. 

Lors de la commande de la mise en page sur les appareils pré-Lollipop, Android utilisera l'ordre des éléments dans le code XML. Plus un élément est bas dans le XML, plus il est haut dans Z-index. Donc, si vous placez le bouton en premier et le champ TextField en dessous, cela fonctionnera.

Toutefois, lors du choix de l'ordre des z-index sur les appareils dotés d'Android au-dessus de l'API 21, le système examine également l'élévation des éléments et rend les éléments avec une valeur d'élévation supérieure aux éléments ayant une valeur d'élévation inférieure. Donc, pour que votre conception fonctionne, vous devez vous assurer que votre TextField a une altitude plus élevée que votre Button, ce que vous pouvez obtenir en définissant Android:elevation sur vos éléments. Le modèle XML ci-dessous fonctionne sur les périphériques pré et post API de niveau 21:

<RelativeLayout 
    xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:id="@+id/rlBottom"
    Android:layout_width="fill_parent"
    Android:layout_height="match_parent">

    <Button
        Android:id="@+id/bVio"
        Android:layout_width="wrap_content"
        Android:layout_height="50dip"
        Android:layout_alignParentLeft="true"
        Android:text="VIO"
        Android:elevation="0dp"
        />

    <TextView
        Android:id="@+id/bVio_count"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:layout_alignRight="@+id/bVio"
        Android:layout_marginTop="6dip"
        Android:layout_marginRight="6dip"
        Android:text="00"
        Android:textSize="15dip"
        Android:textColor="#FF0000"
        Android:elevation="10dp"
        />

</RelativeLayout>
34
lejonl

Prenez RelativeLayout comme bouton en modifiant son arrière-plan et définissez TextView sur centerInParent = "True"

<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:id="@+id/rlBottom"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:background="@drawable/ic_launcher" >

    <TextView
        Android:id="@+id/bVio_count"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:layout_centerInParent="true"
        Android:text="I am khan "
        Android:textColor="#FF0000"
        Android:textSize="35dip" />

</RelativeLayout>

Classe  

(RelativeLayout)findViewById(R.id.rlBottom).setOnClick(new OnClick... //like a button
0
Xar E Ahmer

ajoutez ce code, cela résoudra votre problème.

Android:stateListAnimator="@null" 

référence cette réponse

Les boutons dans Lollipop et les versions supérieures ont une élévation par défaut, ce qui les oblige à toujours dessiner en haut. Vous pouvez changer cela en remplaçant le StateListAnimator par défaut.

Essayez de mettre ceci dans votre bouton XML:

Android:stateListAnimator="@null"

Le FrameLayout devrait maintenant couvrir le bouton.

0
ahsiu