Tengo una vista personalizada que amplía la clase Vista. Me gustaría 2 instancias de mi vista personalizada en capas directamente una encima de la otra. ¿Cómo debería verse mi archivo de diseño para lograr esto?Cómo crear vistas en capas
Respuesta
Resulta que FrameLayout era lo que quería. Sólo hacer esto en su diseño:
<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>
Utilice un RelativeLayout
. Los hijos posteriores del RelativeLayout
se superpondrán a los hijos anteriores.
Si bien es cierto que se puede lograr usando capas RelativeLayout
y FrameLayout
, en la API de 21 y más .. las cosas han cambiado.
En API 21 y superior, los hijos posteriores de xml no significa que se superpondrá a los hijos anteriores. En su lugar, usa Elevation
para determinar qué vista se superpondrá a otra vista (índice Z).
Por ejemplo, si tiene algo como esto.
<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>
El View
no serán visibles a pesar de que se añadió después Button
. Eso es porque Button
tiene una elevación más alta que View
. Para reorganizar Z-Index puede agregar el atributo elevation
a las vistas respectivas.
<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 esta manera el View
se solaparán la Button
.
Más información sobre Elevación & sombras: https://material.io/guidelines/material-design/elevation-shadows.html
- 1. Android crear capas en lienzo
- 2. Cómo crear vistas actualizables en TSQL
- 3. Vistas respaldadas por capas y controles de parpadeo
- 4. SurfaceViews en capas en FrameLayout en Android
- 5. Crear comentarios para las vistas en mysql
- 6. Crear ayuda personalizada disponible en las vistas
- 7. ¿Cómo crear varias ventanas/vistas en el iPhone?
- 8. UIDatePicker en UIActionSheet capas problema
- 9. ¿Cuántas capas son demasiadas?
- 10. ¿Cómo crear un botón que contiene múltiples vistas?
- 11. de varias capas ExpandableListView
- 12. ¿Cómo crear un archivo PSD en capas desde la línea de comandos?
- 13. Interfaces en diferentes capas lógicas
- 14. arquitectura de 3 capas: paso de datos entre capas
- 15. Cómo agregar vistas a vistas mediante programación
- 16. Repositorio git "Capas"
- 17. ¿Puedo crear vistas con el parámetro en MySQL?
- 18. Gráficos en capas en d3.js
- 19. Capas Python PSD?
- 20. Copia de modelos entre capas
- 21. ¿Cómo extraer capas de un archivo de Photoshop? C#
- 22. cómo eliminar vistas secundarias
- 23. Cómo establecer el tamaño dibujable en la lista de capas
- 24. Magento: cómo agregar navegación en capas a la búsqueda avanzada?
- 25. Structuremap - Cómo registrar ciertos tipos en ciertas capas
- 26. Capas de diseño? ¿Eje Z?
- 27. Uso de ventanas en capas para crear bordes de ventana lisos
- 28. necesidad de crear un diccionario en capas de un piso uno
- 29. ¿Cómo alinear vistas en el medio de otra línea base de vistas?
- 30. ¿Cómo separar capas en una arquitectura de capas estrictas y promover la modularidad sin causar redundancia innecesaria?
Gracias compañero. Me estaba volviendo loco sobre esto y eso parece funcionar bastante bien. Pensé que FrameLayout solo podía contener 1 vista infantil visible a la vez ... Ya estaba tratando de crear mi propio diseño y era como pensar: ¡tiene que haber una manera más fácil! P.S. Ah, y en caso de que no sea obvio, las vistas se muestran de arriba a abajo de manera predeterminada, por lo que board2 se dibuja sobre board1. – Timo
Muy agradable. Debo decir que no me gusta la frecuencia con la que se usan los diseños relativos y estoy feliz de que este no use ninguno. (¡Los parientes son tan desordenados! ¡Cada objeto necesita tener algunos atributos que describan su posición! Parece que eso frustra el propósito de usar diseños ...) – ArtOfWarfare