Cómo traer una vista al frente sin llamar bringToFront ()?
Aparentemente hay un error en Android que rompe View.bringToFront
.
Si tengo vistas organizadas en un GridView y quiero llevar una vista al frente llamando a bringToFront (), puede moverse a la posición inferior derecha en el GridView.
- El onQueryTextSubmit en SearchView se procesa dos veces en Android Java
- Obtenga de forma fiable la altura de la barra de estado para resolver problemas de navegación translúcida de KitKat
- SearchView gana el foco y abre el teclado cuando regresa de otra actividad
- se llama onmeasure y no sé por qué - android
- Ocultar búsqueda / ir botón en el teclado virtual cuando se utiliza la búsqueda?
Algo sombrío está pasando allí, así que no puedo usar bringToFront (). Cuando no lo llamo, todo funciona bien. Pero las vistas se superponen – si utilizo la animación de escala para ampliar una vista, es parcialmente oscurecida por las vistas en la parte inferior y derecha.
He comprobado la fuente de bringToFront y llama a parent.bringChildToFront (…)
Es este método
public void bringChildToFront(View child) { int index = indexOfChild(child); if (index >= 0) { removeFromArray(index); addInArray(child, mChildrenCount); child.mParent = this; } }
Aparentemente elimina la vista de sí mismo! ¡Sin piedad! ¿Es un ViewGroup tan tonto que no puede manejar los índices Z de ninguna otra manera que los controles de barajar alrededor? Obviamente, cuando GridView elimina a su hijo y luego lo añade de nuevo, se coloca al final de la cuadrícula!
¿Hay algo que pueda hacer para mostrar una vista encima de otros sin recurrir a algún hacking? Una cosa que me viene a la mente es crear otra vista por encima de GridView, que aparecerá por encima de la que estoy tratando de bringToFront (), pero no me gusta esta solución.
- Cambiar / usar múltiples diseños dentro de la misma actividad?
- ¿Cómo crear un semicírculo transparente?
- Android, agregue una nueva vista sin diseño XML
- Establecer funcionalidad del botón de retroceso del widget de búsqueda
- El diseño de la vista no se actualiza en el cambio de orientación en android
- Menús de desbordamiento de acciones para elementos de una vista de lista
- Android SearchView cadena vacía
- ¿Cómo puedo reconocer qué área de una imagen (no sólo las coordenadas) se ha tocado en Android?
Aparentemente perdí la android:clipChildren="false"
en GridView. Resuelve mi problema.
¿Has intentado hacer que la View
pueda enfocar y simplemente llamar a requestFocus ()?
Llamar bringToFront () cambia el orden en GridView. Intente crear un ImageView con una imagen de la vista que desee animar y animar en su lugar.
Bitmap bitmap = Bitmap.createBitmap(view.getWidth(), view.getHeight(), Bitmap.Config.ARGB_8888); Canvas canvas = new Canvas(bitmap); view.draw(canvas); final ImageView imageView = new ImageView(getActivity()); imageView.setImageBitmap(bitmap); ViewGroup.LayoutParams params = new ViewGroup.LayoutParams(view.getWidth() , view.getHeight()); imageView.setLayoutParams(params); rootview.addView(imageView);
Agregue un oyente de animación a su animación y quite el ImageView al final de la animación.
Desde la API 21 puede llamar a:
view.setZ(float)
Si apuntas a la API por encima de 21, simplemente puedes añadir el atributo android:translationZ="xxx dp"
a tu XML.
Tenga en cuenta que si agrega elevación en vistas como cardview, se pasa al eje Z. Y si quieres una vista venir a primer plano utilizando esta manera, sólo tienes que hacerlo más alto que la elevación que estableció.
Ejemplo: 6 dp elevación en cardview requerirá un 7dp en el atributo translationZ de la vista que desea en primer plano.