Me he dado cuenta de que Android, WPF y Silverlight siguen un patrón de diseño de dos pasos. Hay un método recursivo de Measure() que se llama para dimensionar el elemento, posiblemente varias veces. Luego se llama a un método Recursive Layout/Arrange() que establece las posiciones exactas de los niños en su control principal, y también establecerá el tamaño final del control.Diseño de IU de dos pasadas: ¿Por qué?
Mi pregunta: ¿por qué esto se divide en dos pasadas, especialmente cuando, para algunos tipos de controles, Measure() no puede calcular el tamaño real de un control sin establecer realmente las posiciones de los niños? ¿Hay algún tipo de caso minoritario de diseño que sea posible gracias a esto?
Estoy tratando de crear mi propio conjunto de herramientas de interfaz de usuario, y actualmente me estoy inclinando por un diseño de diseño de una sola pasada(), pero me gustaría estar convencido de si esto es acertado o no.
Gracias por leer esto :)
Sean
Es el último bit, "finalmente informa a cada elemento de su espacio asignado", esa es la parte importante. El administrador de widgets no permite que los controles se dimensionen solo, solo les permite dar pistas. – moswald
Hmm. Entiendo cómo los niños pueden ser codiciosos sobre el tamaño que se les asigna, y luego le corresponde a los padres repartir la cantidad correcta de espacio. Pero, puede lograr esto en un algoritmo de paso único haciendo una medida() de cada elemento secundario, y luego un diseño final() para cada elemento secundario, todo bajo la llamada de diseño() del elemento principal. Esto seguiría siendo una única recursión del árbol, pero con dos pases para cada grupo de niños. ¿Estoy en lo cierto al pensar que esto logra el mismo fin que el enfoque de dos pasos, pero es menos eficiente? – Sean
Desde la perspectiva de los abuelos, el padre es solo otro hijo al que quiere medir() y el diseño(). ;) – Bubblewrap