2010-01-21 16 views
9

Necesito preparar algunos objetos según el diseño inicial de widgets y vistas en mi Actividad. Me gustaría hacerlo en los pasos de inicialización, idealmente onCreate y onStart. Teniendo en cuenta la posibilidad de cambios que suceden cuando no estamos en primer plano, algunos de ellos podrían tener que pasar en ReResumen.¿Cuándo hace primero el diseño de Android?

Así que comprobé si podía medir cómo se habían distribuido mis vistas.

Log.d("MyApp", "w,h of X is " + findViewById(R.id.X).getWidth() + 
     "," + findViewById(R.id.X).getHeight()); 

Ejecuto esto en onCreate, onStart y onResume. Cada vez recibo 0,0 por ancho, alto. Si espero en TouchEvent, obtengo la información de diseño, por lo que el diseño ya está hecho.

Me sorprende que el diseño no esté configurado y sea definitivo para el momento en que estoy viendo en Reanudar. Esperaba que los widgets ya estuvieran listos y listos para jugar.

Respuesta

4

El diseño lo hace la jerarquía de vistas según sea necesario.

Cuando se inicia la aplicación, esto será un tiempo después de onResume() (a medida que su ventana se abre y se coloca en la pantalla).

La forma correcta para obtener información sobre las operaciones de distribución es a través de los diferentes servicios repetidos vista de jerarquía - View.onSizeChanged(), etc, ya documentado en "Layout" here:

+0

hice un seguimiento de pila en el método onSizeChanged y que viene de la ciclo de despacho de mensajes. – Brian

+1

No parece haber una manera de establecer un controlador "onSizeChanged" sin crear subclases, lo cual es desafortunado, porque algunos diseños no tienen constructores. Terminas teniendo que trabajar mucho para algo que debería ser trivial. –

+1

@dpk puede usar ViewTreeObserver para establecer un montón de devolución de llamada relacionada con el dibujo y el diseño y así evitar tener que subclasificar la vista. –

Cuestiones relacionadas