medir una vista antes de renderizarla

Necesito averiguar qué tan grande será una vista después de conectarlo a su padre.

He anulado este método:

onMeasure(int, int); 

pero parece que este método se invoca solo cuando agrego mi vista personalizada a su contenedor usando:

 addView(myView); 

¿Crees que hay una forma de obtener esta información antes de representarla? Básicamente, necesito saber el tamaño real antes de conectarlo y no adjuntar la vista en absoluto si se necesita más cantidad de espacio.

¿nadie?

Si desea obtener el ancho y el alto antes de que su actividad lo haya agregado a su jerarquía de vistas, medido y replanteado, deberá llamar a measure() en View antes de llamar a getMeasuredWidth() o getMeasuredHeight() .

Como el ancho y la altura medidos se establecen después de que se ha llamado a measure (que a su vez llama a onMeasure() ) devolverán 0 antes de este punto. Deberá proporcionar MeasureSpec para measure(..) que variará según sus necesidades.

Las MeasureSpecs que les permiten a los niños imponer cualquier restricción se ven como

 int widthMeasureSpec = MeasureSpec.makeMeasureSpec(*some width*, MeasureSpec.EXACTLY); int heightMeasureSpec = MeasureSpec.makeMeasureSpec(*some height*, MeasureSpec.EXACTLY); 

Punto importante (se ha cambiado en la API nueva) El ancho pasado de arriba puede ser explícita px o ViewGroup.LayoutParams.WRAP_CONTENT o ViewGroup.LayoutParams.FILL_PARENT.

También vale la pena señalar que cuando su punto de vista se mide en la jerarquía de destino real, la MeasureSpec que se pasará a measure() se configurará en función de la lógica de diseño que contenga ViewGroups . Se puede invocar más de una vez si los primeros vals de medida no son válidos cuando se consideran en el contexto de este padre viewGroup / its own layout constraits / the constraints de cualquier hermano child-views. Sin esperar a que viewGroup llame a measure() antes de implementar cualquier lógica que dependa del tamaño medido, sería difícil (dependiendo de la situación) obtener la measuredWidth & height final de measuredWidth & height de la solución anterior, pero en todas las instancias he usado el la técnica anterior se ajusta al propósito, pero han sido relativamente simples. Si realmente necesita medir en contexto, probablemente debería hacerlo después de que onLayout() haya regresado y establezca explícitamente cualquier cambio, luego requestLayout() nuevamente.

OnMeasure no te dice el tamaño de la Vista. En su lugar, le pide a su Vista personalizada que configure su tamaño al proporcionar algunas restricciones impuestas por la Vista principal.

Esto es de la documentación del SDK:

El primer par se conoce como ancho medido y altura medida. Estas dimensiones definen qué tan grande quiere ser una vista dentro de su elemento primario (vea Diseño para más detalles). Las dimensiones medidas se pueden obtener llamando a getMeasuredWidth () y getMeasuredHeight ().

El segundo par simplemente se conoce como ancho y alto, o a veces el ancho del dibujo y la altura del dibujo. Estas dimensiones definen el tamaño real de la vista en la pantalla, en el momento del dibujo y después del diseño. Estos valores pueden, pero no tienen que ser, ser diferentes del ancho y la altura medidos. El ancho y la altura se pueden obtener llamando a getWidth () y getHeight ().

Después del diseño, puede llamar a getWidth () y getHeight () para encontrar el tamaño final de su vista personalizada.

Debería poder usar getMesauredWith () y getMeasuredHeight ()

http://developer.android.com/reference/android/view/View.html#getMeasuredWidth%28%29

Estoy teniendo el mismo problema. Supongo que la única forma es renderizarlo primero y luego eliminarlo si cumple con las condiciones de tamaño. Parece un poco extraño, pero Android solo parece conocer las dimensiones después del dibujo.