Definiendo el orden Z de vistas de RelativeLayout en Android
Me gustaría definir el orden z de las vistas de un RelativeLayout en Android.
Sé que una manera de hacer esto es llamar a bringToFront
.
- ¿Cómo hacer un botón que muestra el carácter de retroceso (⌫) en Android?
- Java.lang.NullPointerException: Intenta invocar el método virtual 'ActionBar.setNavigationMode (int)' en una referencia de objeto nulo
- Nombre de paquete alias o apodo
- Android L's Ripple Effect - Touch Feedback para los botones - Uso de XML
- ¿Cómo agregar efecto de rizo y tener fondo personalizado en el botón en android?
¿Hay mejor manera de hacer esto? Sería genial si pudiera definir el orden z en el xml de diseño.
- Android - Recursos $ NotFoundException
- SetCompoundDrawablesWithIntrinsicBounds (int, int, int, int) no funciona
- Dimens.xml en la carpeta de valores de 7 "y 10" tableta, ¿cómo?
- Configuración de la orientación de la pantalla Actividad de Android con values.xml
- ¿Cómo funciona android: rotationX y android: rotationY en XML realmente funciona?
- "No se encontró la descripción del mensaje" en strings.xml
- Extraño borde negro alrededor de XML extraíble android
- CardView ha perdido el margen al inflar
La forma más sencilla es simplemente prestar atención al orden en que las vistas se agregan a su archivo XML. Más abajo en el archivo significa más arriba en el eje Z.
Editar: Esto se documenta aquí y aquí en el sitio de desarrolladores de Android. (Gracias @ flightplanner)
Si quieres hacer esto en código, puedes hacerlo
View.bringToFront();
Ver documentos
Tenga en cuenta que los botones y otros elementos de la API 21 y superiores tienen una alta elevación y, por lo tanto, ignoran el orden xml de los elementos, independientemente de la disposición principal. Me tomó un tiempo para calcular que uno fuera.
Encontré los mismos problemas: En un parentView de la disposición relativa, tengo 2 niños childView1 y childView2. En primer lugar, poner childView1 sobre childView2 y quiero childView1 para estar en la parte superior de childView2. Cambiar el orden de las vistas de los niños no solucionó el problema para mí. Lo que funcionó para mí es configurar android: clipChildren = "false" en parentView y en el código que establezco:
childView1.bringToFront(); parentView.invalidate();
Tenga en cuenta que puede utilizar view.setZ(float)
desde el nivel API 21. Aquí puede encontrar más información.
En Android, a partir del nivel 21 de la API, los elementos del archivo de diseño obtienen su orden Z tanto de cómo se ordenan dentro del archivo, como se describe en la respuesta correcta, y desde su elevación, un valor de elevación más alto significa que el elemento obtiene una orden Z más alta .
Esto a veces puede causar problemas, especialmente con los botones que a menudo aparecen en la parte superior de los elementos que de acuerdo con el orden de la XML debe estar por debajo de ellos en orden Z. Para arreglar esto, simplemente establezca el android:elevation
de los elementos en su XML de diseño para que coincida con el orden Z que desea lograr.
I usted fija una elevación de un elemento en la disposición que comenzará a echar una sombra. Si no desea este efecto, puede eliminar la sombra con un código así:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { myView.setOutlineProvider(null); }
No he encontrado ninguna manera de quitar la sombra de una vista elevada a través del xml de la disposición.
Pensé en añadir una respuesta desde la introducción de la
Androide traducción
El campo XML cambió las cosas un poco. Las otras respuestas que sugieren correr
childView1.bringToFront(); parentView.invalidate();
Son totalmente mancha EXCEPTO para que este código NO traiga childView1 delante de cualquier vista con un androide codificado: translationZ en el archivo XML. Estaba teniendo problemas con esto, y una vez que quité este campo de las otras vistas, bringToFront () funcionó muy bien.
ChildView.bringToFront () no funcionó para mí, así que establezco la traducción de Z del elemento recientemente añadido (el que estaba superponiendo a todos los demás niños) a un valor negativo como:
lastView.setTranslationZ(-10);
Consulte https://developer.android.com/reference/android/view/View.html#setTranslationZ(float) para obtener más información.
Puede utilizar RelativeLayout
personalizado con redefinido
protected int getChildDrawingOrder (int childCount, int i)
Tenga en cuenta – este método toma param i
como "qué vista debo dibujar i'th
". Así funciona ViewPager
. Establece el orden de dibujo personalizado en PageTransformer
con PageTransformer
.
- Crear un archivo APK no firmado con Android Studio
- Error: (26, 0) Gradle Método DSL no encontrado: 'runProguard ()'