Medir una vista antes de hacerla

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

He anulado este método:

onMeasure(int, int); 

Pero parece que este método se invoca sólo cuando realmente agregar mi vista personalizada a su contenedor mediante:

 addView(myView); 

¿Cree usted que hay una manera de obtener esta información antes de hacer la vista en sí? Básicamente, necesito saber el tamaño actuall antes de adjuntarlo y no adjuntar la vista en absoluto si se necesitaría más cantidad de espacio.

¿nadie?

Si desea obtener el ancho y la altura antes de que su actividad lo haya agregado a su jerarquía de vista, medido y establecido, tendrá que llamar a measure() en la View usted mismo antes de llamar a getMeasuredWidth() o getMeasuredHeight() .

Como la anchura y la altura medidas se establecen después de que se ha llamado la medida (que a su vez llama onMeasure() ) volverán a 0 antes de este punto. Usted tendrá que suministrar MeasureSpec s para measure(..) que variará dependiendo de sus necesidades.

Las MeasureSpecs que permiten a los niños imponer cualquier limitación parecen

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

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

Su también digno de notar cuando su opinión se mide en la jerarquía real del destino el MeasureSpec que será pasado a la measure() será configurado basado en la lógica que contiene de la disposición de ViewGroups . Puede ser llamado más de una vez si los primeros vals de medida no son válidos cuando se consideran en el contexto de este parental viewGroup / su propio layout restringe / las restricciones de cualquier child-views de hermanos. Sin esperar a que el grupo viewGroup llamara measure() antes de implementar cualquier lógica dependiente del tamaño medido, sería difícil (dependiendo de la situación) obtener la measuredWidth & height final de la solución anterior, pero en todas las instancias que he usado Sobre la técnica que ha encajado el propósito, pero han sido relativamente simples. Si realmente necesitas medir en contexto, probablemente deberías hacerlo después de que onLayout() haya regresado y de forma explícita establecer los cambios, entonces requestLayout() nuevo.

OnMeasure no le indica el tamaño de la vista. En su lugar, le pide a su vista personalizada que establezca su tamaño proporcionando algunas restricciones impuestas por la vista primaria.

Esto es de la documentación de SDK:

El primer par se conoce como anchura medida y altura medida. Estas dimensiones definen el tamaño de una vista que quiere estar dentro de su matriz (vea el esquema para más detalles). Las dimensiones medidas se pueden obtener llamando a getMeasuredWidth () y getMeasuredHeight ().

El segundo par se conoce simplemente como anchura y altura, o a veces el ancho de dibujo y la altura de dibujo. Estas dimensiones definen el tamaño real de la vista en pantalla, en el tiempo de dibujo y después del diseño. Estos valores pueden, pero no tienen que ser, diferentes de la anchura y altura medidas. 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.

Usted debe ser capaz de utilizar getMesauredWith () y getMeasuredHeight ()

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

Estoy teniendo el mismo problema. Supongo que la única manera es hacerla primero, después quitarla después si cumple la condición del tamaño. Parece un poco extraño, pero Android sólo parece conocer las dimensiones después del dibujo.

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.