J'ai une vue personnalisée qui étend la classe View. Je souhaite que deux instances de ma vue personnalisée soient superposées directement les unes au-dessus des autres. Comment mon fichier de mise en page devrait-il chercher à atteindre cet objectif?Comment superposer des vues
Répondre
Il s'avère que FrameLayout était ce que je voulais. Il suffit de le faire dans votre mise en page:
<FrameLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content" >
<com.proj.MyView
android:id="@+id/board1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"/>
<com.proj.MyView
android:id="@+id/board2"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
</FrameLayout>
Utilisez un RelativeLayout
. Plus tard les enfants du RelativeLayout
chevaucheront les enfants plus tôt.
Il est vrai que vous pouvez réaliser en utilisant la superposition RelativeLayout
et FrameLayout
, dans l'API 21 et plus .. les choses ont changé.
Dans l'API 21 et les versions ultérieures, les enfants ultérieurs de xml ne signifient pas qu'il chevauchera les enfants plus tôt. Au lieu de cela, il utilise Elevation
pour déterminer quelle vue chevauchera l'autre vue (Index Z).
Par exemple, si vous avez quelque chose comme ça.
<FrameLayout
android:layout_height="match_parent"
android:layout_width="match_parent">
<Button
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/white"
android:text="Hello World"
android:layout_gravity="top" />
<View
android:layout_width="match_parent"
android:layout_height="10dp"
android:background="@android:color/black"
android:layout_gravity="bottom" />
</FrameLayout>
Le View
ne sera pas visible, même si elle a été ajoutée après Button
. C'est parce que Button
a une altitude plus élevée que View
. Pour réorganiser l'index Z, vous pouvez ajouter l'attribut elevation
aux vues respectives.
<FrameLayout
android:layout_height="match_parent"
android:layout_width="match_parent">
<Button
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/white"
android:text="Hello World"
android:layout_gravity="top"
android:elevation="0dp" />
<View
android:layout_width="match_parent"
android:layout_height="10dp"
android:background="@android:color/black"
android:layout_gravity="bottom"
android:elevation="2dp" />
</FrameLayout>
De cette façon, la View
se chevaucher le Button
.
Plus d'informations sur Elevation & Ombres: https://material.io/guidelines/material-design/elevation-shadows.html
- 1. comment superposer des éléments sur le flash?
- 2. Div/CSS/ZIndex - comment superposer des images?
- 3. Comment superposer deux GwtCanvas?
- 4. Comment superposer Direct3D dans DirectShow
- 5. Comment superposer des graphiques sur des jeux Windows?
- 6. Comment superposer un bouton par programmation?
- 7. Comment animer des vues?
- 8. Possibilité de 'superposer' des applications Android?
- 9. Comment superposer des diagrammes SVG sur Google Maps?
- 10. Comment coller et superposer des images dans WPF?
- 11. Comment superposer une image à une autre?
- 12. Comment superposer JavaScript sur une image statique?
- 13. Comment superposer deux images (tableaux d'octets)
- 14. Comment superposer une image sur une autre?
- 15. Comment superposer un contrôle sur une fenêtre?
- 16. Comment superposer sur le clavier dans xcode
- 17. comment superposer une image dans l'application iphone?
- 18. Comment superposer (superposer) une image sur une icône de fichier en utilisant Cocoa?
- 19. Publier des sous-vues
- 20. Comment suivre l'importation des vues dans Django
- 21. preg_replace avec des vues dans Codeigniter, comment?
- 22. Comment charger des vues complexes simultanément
- 23. Comment créer des vues personnalisées pour AppWidgets?
- 24. Comment implémenter des vues sur le pagecontrol
- 25. Comment suivre l'utilisation des flux RSS/vues?
- 26. Comment parcourir des vues dans Revit?
- 27. Comment imbriquer des vues au printemps
- 28. Comment charger des vues indépendamment du site.master?
- 29. Superposer NSScroller sur le contenu
- 30. Pouvez-vous superposer des images transparentes dans Blackberry Apps?
Merci compagnon. Je devenais fou à ce sujet et cela semble très bien fonctionner. Je pensais que FrameLayout ne pouvait contenir qu'une vue enfant visible à la fois ... J'essayais déjà de créer ma propre mise en page et je pensais comme: il doit y avoir un moyen plus simple! P.S. Oh, et si ce n'est pas évident, les vues sont rendues de haut en bas par défaut, donc board2 est dessiné au dessus de board1. – Timo
Très bien. Je dois dire, je n'aime pas la fréquence des mises en page et je suis heureux que celui-ci n'en utilise pas. (Les parents sont tellement en désordre! Chaque objet doit avoir quelques attributs décrivant sa position! Il semble que cela vienne à l'encontre de l'objectif d'utiliser des mises en page ...) – ArtOfWarfare