¿Por qué ver el ancho y la altura 0 en post () ejecutables?

Estoy obteniendo la altura y el ancho de una vista, inflados en el método getView (). Es un elemento de la cuadrícula.

Por lo general, uso post () en la vista para obtener el tamaño, después de que se adjuntó a la distribución. Pero devuelve 0.

final View convertViewFinal = convertView; convertView.post(new Runnable() { @Override public void run() { doSomethingWithConvertView(convertViewFinal); } }); 

 doSomethingWithConvertView(View v) {v.getWidth(); /*returns 0*/}; 

¿Cómo obtengo el tamaño?

Aunque el uso de un viewTreeObserver definitivamente funciona, he descubierto que los requisitos de las mediciones de llamadas en vistas infladas se pueden hacer de forma fiable utilizando un runnable desde la vista de la actividad. es decir

 someActivityInstance.getWindow().getDecorView().post(new Runnable() { @override public void run() { // someMeasurements } }); 

La cosa es que el convertview lo más probable no es dibujado en la pantalla del teléfono todavía, así que usted tiene que esperar hasta que esté listo.

Necesita utilizar ViewTreeObserver, para saber exactamente cuándo se ha dibujado la vista.

Compruebe esta respuesta para obtener más información: ¿Cuándo puedo primero medir una vista?

Usted probablemente está llamando a esto en onCreate o onStart o onResume, los métodos que se ejecuta antes de la medida de diseño. Pero hay un montón de trabajo alrededor, esta es una buena opción:

 ViewTreeObserver vto = rootView.getViewTreeObserver(); vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() { public void onGlobalLayout() { v.getWidth();//already measured... } }); 

Donde rootView puede ser cualquier grupo viewGroup en un nivel superior al que desea el ancho. Pero tenga en cuenta que este listner puede ejecutar más de una vez.

  • ¿Cómo obtener una vista más grande que su padre?
  • ¿Es posible detectar cuando cualquier aplicación está en pantalla completa en android?
  • Cómo agregar una vista a la parte superior de un diseño lineal en el código?
  • Método para anular cuando el diseño se destruye en Android
  • Mostrar widgets en la vista de mapa
  • Imagen de círculo con texto
  • Visibilidad de un botón en el temporizador
  • OnMeasure explicación de vista personalizada
  • Android - ¿Cómo crear una vista de círculo con Android?
  • Sobreescribiendo el método onScroll del com.android.View en la codificación android?
  • Android: ¿cuál es la diferencia entre los estados enfocado, habilitado, presionado y seleccionado?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.