Ответ
ViewGroup измеряет детей последовательно, учитывая их MeasureSpec, и может вызывать measure() несколько раз для одного child (например, в RelativeLayout). В Compose Layout измеряет всех детей одновременно через MeasurePolicy, используя constraints вместо MeasureSpec.
Пример в Compose:
Layout(
content = { /* children */ },
measurePolicy = { measurables, constraints ->
// Параллельное измерение всех детей
val placeables = measurables.map { it.measure(constraints) }
// Расчет размеров и позиционирование
layout(width, height) {
placeables.forEach { it.place(x, y) }
}
}
)
Ключевые отличия:
- Параллельность – Compose измеряет детей за один проход
- Constraints – более гибкие, чем MeasureSpec
- Неизменяемость – результаты измерения нельзя переиспользовать между recompositions