¿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.
- Java.lang.InstantiationException: no se puede instanciar class: no hay constructor vacío
- No se puede obtener el atributo clipChildren = false para trabajar
- Cómo establecer una matriz como etiqueta a cualquier vista a través de diseño xml en android
- Cómo detectar si la actividad principal de la vista se está destruyendo
- ¿Qué el mensaje de logcat: "E / MoreInfoHPW_ViewGroup (2905): Vista de padre no es un TextView" significa?
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?
- Llamar findViewById () desde fuera de una actividad
- ¿Cómo dejas de que ADT Logcat View aparezca automáticamente en Eclipse?
- Android: cómo deshabilitar todos los clics en una vista
- Android: hacer una vista personalizada desplazable
- Dibuja un círculo en una vista (android)
- ¿Cómo puedo reproducir vídeos de Youtube en un diseño personalizado de Android?
- es view.setOnTouchListener (listener) multicast? ¿como funciona?
- Cómo ocultar / deshabilitar adview admob?
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.
- Achartengine toScreenPoint (doble) devuelve siempre nullPointerException
- Aplicación para Android que muestra diferentes diseños a la vez con hdmi