Какая функция позволяет сделать свой Layout в Compose

«Какая функция позволяет сделать свой Layout в Compose» — вопрос из категории Jetpack Compose, который задают на 24% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Layout — это низкоуровневая функция в Jetpack Compose, позволяющая создать кастомный лейаут с нуля. Она принимает content и измеряет/размещает его по своим правилам.

Пример:

@Composable
fun CustomLayout(
    modifier: Modifier = Modifier,
    content: @Composable () -> Unit
) {
    Layout(
        content = content,
        modifier = modifier
    ) { measurables, constraints ->
        // 1. Измеряем дочерние элементы
        val placeables = measurables.map { it.measure(constraints) }

        // 2. Вычисляем размер лейаута
        val width = placeables.sumOf { it.width }
        val height = placeables.maxOfOrNull { it.height } ?: 0

        // 3. Размещаем дочерние элементы
        layout(width, height) {
            var x = 0
            placeables.forEach { placeable ->
                placeable.placeRelative(x = x, y = 0)
                x += placeable.width
            }
        }
    }
}

Здесь мы создаем горизонтальный лейаут, размещая элементы друг за другом.