La définition de Z ordre de vues de RelativeLayout dans Android
Je voudrais définir l'ordre du point de vue d'un RelativeLayout dans Android.
Je connais une façon de le faire est d'appeler bringToFront
.
Est qu'il ya une meilleure façon de faire cela? Ce serait génial si je pouvais définir l'ordre dans la mise en page xml.
- Vue.bringToFront(); est la anser
Vous devez vous connecter pour publier un commentaire.
La façon la plus simple est tout simplement de prêter attention à l'ordre dans lequel les points de Vue sont ajoutés à votre fichier XML. Plus bas dans le fichier des moyens plus haut, dans l'axe des Z.
Edit:
Ceci est documenté ici et ici sur l'Android developer site. (Merci @flightplanner)
Si vous voulez le faire dans le code
vous pouvez faire
voir docs
Veuillez noter, les boutons et d'autres éléments de l'API de 21 ans et plus ont une haute altitude, et donc ignorer le xml ordre des éléments quel que soit le parent de mise en page. M'a fallu un certain temps pour comprendre que l'un.
Dans Android à partir de l'API de niveau 21, les éléments dans le fichier de layout obtenir leur ordre à la fois de la façon dont ils sont ordonnés dans le fichier, comme décrit dans la réponse correcte, et de leur élévation, une plus grande élévation de la valeur de l'élément gagne plus de Z bon de commande.
Cela peut parfois causer des problèmes, surtout avec des boutons qui apparaissent souvent sur les éléments qui, selon l'ordre de le XML doit être au-dessous d'eux dans l'ordre Z. Pour corriger cela il suffit de régler le
android:elevation
des éléments de votre mise en page XML pour correspondre à l'ordre que vous voulez atteindre.Je vous définissez une élévation d'un élément dans la mise en page, il va commencer à projeter une ombre. Si vous ne voulez pas de cet effet, vous pouvez supprimer l'ombre avec le code comme ceci:
Je n'ai pas trouvé de moyen de supprimer l'ombre d'une vue en élévation à travers la mise en page xml.
android:elevation="1000dp"
. Pas l'ombre est traduit de cette manière.J'ai rencontré les mêmes problèmes: En un rapport de mise en page parentView, j'ai 2 enfants childView1 et childView2. Au début, j'ai mis childView1 ci-dessus childView2 et je veux childView1 pour être au top de childView2. Modification de l'ordre des enfants de points de vue ne permet pas de résoudre le problème pour moi. Ce qui a fonctionné pour moi est de mettre en android:clipChildren="false" sur parentView et dans le code que j'ai mis:
child.bringToFront()
avecparent.invalidate()
fonctionne, maisparent.bringChildToFront(child)
ne le fait pas. Où est la logique que nous attendons tous à partir d'un OS?LinearLayout
est bousille les enfants afin...android:clipChildren="false"
a fait le tour. Merci!!!!Veuillez noter que vous pouvez utiliser
view.setZ(float)
à partir de l'API de niveau 21. Ici vous pouvez trouver plus d'info.J'ai pensé ajouter une réponse depuis l'introduction de la
Champ XML changé les choses un peu. Les autres réponses qui suggèrent l'exécution de
sont totalement tache sur SAUF que ce code ne sera PAS apporter childView1 en face de n'importe quelle vue avec une codé en dur android:translationZ dans le fichier XML. J'ai eu des problèmes avec cela, et une fois que j'ai enlevé ce champ de l'autre points de vue, bringToFront() a très bien fonctionné.
elevation
API 21 a
view.setElevation(float)
construire-dans leUtilisation
ViewCompat.setElevation(view, float);
pour la compatibilité descendantePlus de méthodes
ViewCompat.setZ(v, pixels)
etViewCompat.setTranslationZ(v, pixels)
Une autre façon de recueillir des boutons ou de la vue tableau et utiliser
addView
à ajouter à RelativeLayoutchildView.bringToFront() ne fonctionne pas pour moi, j'ai donc mis le Z traduction de la moins récemment ajouté l'élément (celui qui est la superposition de tous les autres enfants) d'une valeur négative comme suit:
lastView.setTranslationZ(-10);
voir https://developer.android.com/reference/android/view/View.html#setTranslationZ(float) pour plus d'
Vous pouvez utiliser des
RelativeLayout
avec redéfiniprotected int getChildDrawingOrder (int childCount, int i)
Le savez, cette méthode prend en param
i
comme "ce qui devrait je dessinei'th
".C'est de cette façon
ViewPager
œuvres. Il définit dessin personnalisé de commande en conjonction avecPageTransformer
.Vérifier si vous avez la moindre élévation sur l'une des Vues en XML. Si oui, ajouter élévation à un autre élément ou supprimer l'élévation de résoudre le problème. À partir de là, c'est l'ordre des points de vue qui dicte ce qui vient au-dessus de l'autre.
Ou mettre le chevauchement de bouton ou de points de vue à l'intérieur d'un FrameLayout. Ensuite, le RelativeLayout dans le fichier xml de respecter l'ordre de enfant les modèles ont-ils ajouté.