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