La documentación de Android dice que hay dos tamaños para una vista, las dimensiones medidas y las dimensiones del dibujo . La dimensión medida es la calculada en la pasada de medición (el método onMeasure ), mientras que las dimensiones del dibujo son el tamaño real en pantalla. Particularmente, la documentación dice que:
Estos valores pueden, pero no necesariamente, ser diferentes del ancho y alto medidos.
Entonces, mi pregunta es: ¿qué podría hacer que la dimensión del dibujo sea diferente de la dimensión medida? Si el método onMeasure (int, int) respeta los requisitos de diseño (dados como los parámetros widthMeasureSpec y heightMeasureSpec , ¿cómo podría el SDK decidir que la vista debería tener un tamaño de dibujo diferente?
Además, ¿cómo / dónde en el código fuente de Android se usa el ancho / alto medido para calcular el ancho / alto del dibujo? Intenté buscar en el código fuente de Ver , pero no puedo entender cómo se usa el ancho / alto medido para calcular el ancho / alto final. Quizás tenga algo que ver con el acolchado, pero no estoy seguro.
fuente
Respuestas:
Como sugiere el nombre, el ancho / alto medido se utiliza durante la fase de medición y diseño.
Déjame dar un ejemplo,
Se pide a un widget que se mida a sí mismo. El widget dice que quiere tener 200 px por 200 px. Esto se mide ancho / alto.
Durante la fase de diseño, es decir, en el método onLayout. El método puede usar el ancho / alto medido de sus hijos o asignar un nuevo ancho / alto llamando al método de diseño de la vista.
digamos que el método onLayout llama a childview.layout (0,0,150,150) ahora el ancho / alto de la vista es diferente al ancho / alto medido.
Sugeriría no usar el método de ancho / alto medido fuera de onLayout.
para resumir .
Además,
public void View.layout(int l, int t, int r, int b)
parece ser el lugar donde ocurre la asignación de posición y tamaño.
fuente