2010-07-10 19 views
9

¿hay alguna manera de obtener cada vista que esté dentro de mi actividad? Tengo más de 200 puntos de vista, incluyendo los botones, y las imágenes, así que quiero ser capaz de acceder a ellos mediante el uso de un bucle¿Cómo obtener todas las vistas en una actividad?

por ejemplo, algo así como

for (View v : this) 
{ 
    //do something with the views 
    //depending on the types (button, image , etc) 
} 

Respuesta

22

es que hay una manera de conseguir todas las vistas que está dentro de mi actividad?

Obtenga su raíz View, convertirlo a ViewGroup, llame getChildCount() y getChildAt() y Recurse según sea necesario.

que tienen más de 200 puntos de vista, incluyendo botones, y las imágenes, por lo que quiero ser acceder a ellos mediante el uso de un bucle

Eso es un número bastante grande de Views.

+0

muchas gracias, perfecto un objeto invisible (botón) estaba bloqueando toda la pantalla, lo usé para descubrir qué elemento estaba bloqueando y lo encontré :) – aryaxt

+6

La herramienta 'hierarchyviewer' que viene con el SDK puede ayudarte encuentra problemas como este Puede mostrar visualmente la jerarquía de vistas de su aplicación como un árbol, lo que le permite inspeccionar las propiedades de cada vista. – adamp

+1

Lo sé, pero la mayoría de los objetos se agregan a la pantalla a través del código. – aryaxt

1

Intenta encontrar todas las vistas asociadas a la actividad.

dar el siguiente comando.

ViewGroup viewgroup=(ViewGroup)view.getParent(); 
viewgroup.getchildcount(); 

iterar a través del ciclo.

Vamos a obtener el resultado.

0

Puede usar el hierarchyviewer. Le permite ver la jerarquía de vistas, incluidas las creadas en código. La razón principal es para depurar cosas como esta. El último Android Studio ahora tiene esta característica en el Monitor de dispositivo que le permite realizar un volcado de la interfaz de usuario para depurarlo.

2

Para ser más específicos:

private void show_children(View v) { 
    ViewGroup viewgroup=(ViewGroup)v; 
    for (int i=0;i<viewgroup.getChildCount();i++) { 
     View v1=viewgroup.getChildAt(i); 
     if (v1 instanceof ViewGroup) show_children(v1); 
     Log.d("APPNAME",v1.toString()); 
    } 
} 

Y a continuación, utilizar la función de alguna parte:

show_children(getWindow().getDecorView()); 

para mostrar todas las vistas de la actividad actual.

Cuestiones relacionadas