¿Cómo enviar la vista hacia atrás? ¿Cómo controlar la orden z de forma programática?
Tengo un problema para enviar la vista atrás. En Android tenemos un método como bringToFront()
, para colocar la vista en la parte superior de la otra vista. Así, quiero poner la vista debajo de la imagen anterior.
¿Hay algún método como sendToBack()
o bringToBack()
en Android. Si es así, ¿puede alguien ayudarme en esto.
- ¿Cómo utilizar mi SurfaceView con main.xml en Android?
- Error al hacer referencia a una clase interna Ver en layout / main.xml
- Opuesto de setContentView
- Android obtiene la vista de Preferencia en PreferenciaActividad
- Android hacer desaparecer la vista haciendo clic fuera de ella
Nota: que no quiero controlar el orden z por el orden de colocar elementos en el diseño quiero controlar el orden z de forma programática.
No quiero ocultar las vistas en el frente, sólo quiero que estén detrás de la vista que se está moviendo.
- El tamaño de texto de Android en la lona difiere del tamaño de texto en TextView
- GridView getChildAt () devuelve null
- Cómo configurar un mapa de bits como fondo para una vista Android API 10-18?
- Butterknife vs AndroidAnnotations
- Android: Redibujar una vista específica dentro de un diseño
- SearchView no obtener el foco
- Setvisibility (view.visible) no funciona después de setvisibility (view.gone)
- se llama onmeasure y no sé por qué - android
Afaik no hay una solución integrada para esto. Supongo que estás tratando de modificar el orden z en un FrameLayout, o algo similar.
Sin embargo, creo que puede modificar el orden de los elementos secundarios contenidos en el diseño. Los métodos RemoveChild … () y addView () pueden tomar valores de posición, por lo que es muy probable que intercambien elementos secundarios alrededor, y eso modificaría el orden z. Parece un poco hacky solución sin embargo.
O considerar la modificación de la propiedad de visibilidad de las vistas de los niños, puede obtener un comportamiento similar, y que sería mucho más limpio, creo.
Editar:
Con la nueva versión de Android, L Developer Preview, parece que al fin tenemos la capacidad de cambiar fácilmente la ordenación Z de Views. Propiedades 'Elevation' y 'TranslationZ' al rescate: https://developer.android.com/preview/material/views-shadows.html
Me doy cuenta de que esto ha sido implícito en otras respuestas, pero nadie publicó el código. Tengo lo siguiente en una clase de utilidad en la que tengo funciones "auxiliares" para tratar con las vistas:
public static void sendViewToBack(final View child) { final ViewGroup parent = (ViewGroup)child.getParent(); if (null != parent) { parent.removeView(child); parent.addView(child, 0); } }
No hay método sendToBack (). Pero si llama a bringToFront () en la vista inferior, obtendrá prácticamente el mismo efecto.
Llame a bringToFront()
en la vista que desee obtener en la parte frontal y, a continuación, llame al método invalidate()
en toda la vista, incluida la vista que desee en la parte frontal. Repita lo mismo para todos los oyentes.
Por lo tanto, cuando se escucha a otro usuario de la vista, la vista anterior se invalidará y estará en segundo plano.
Aquí está el método que estoy usando para enviar una vista a la parte posterior (tan opuesto de bringToFront, tipo de sendToBack):
private void moveToBack(View myCurrentView) { ViewGroup myViewGroup = ((ViewGroup) myCurrentView.getParent()); int index = myViewGroup.indexOfChild(myCurrentView); for(int i = 0; i<index; i++) { myViewGroup.bringChildToFront(myViewGroup.getChildAt(i)); } }
¡Espero que esto ayude!
También puede intentar utilizar la funcionalidad del método ViewGroup.addViewInLayout()
que toma un índice, determinando si la vista debe estar al final o al principio de la lista
Puede intentar hacer view.setVisibility(View.INVISIBLE)
o view.setVisibility(View.GONE)
.
ACTUALIZAR:
Esto le muestra cómo lograr lo que desea hacer.
O bien poner su visibilidad a 0 o simplemente llevar la vista debajo de ella en frente de ella.
Tenga en cuenta que puede utilizar view.setZ(float)
desde el nivel API 21. Aquí puede encontrar más información.
- Opciones gratuitas de Corona SDK
- Android: detecta el evento de desbloqueo del teléfono, no muestra la pantalla