Код: Выделить всё
@Composable
fun CustomComposable(modifier: Modifier = Modifier, content: @Composable () -> Unit) {
Layout(
modifier = modifier,
content = content,
measurePolicy = { measurables, constraints ->
val placeables = measurables.map {
it.measure(constraints)
}
layout(constraints.maxWidth, constraints.maxHeight) {
var y = 0
placeables.forEach {
it.place(0, y)
y += (it.height)
}
}
},
)
}
Код: Выделить всё
CustomComposable(
modifier = Modifier
.size(200.dp)
.background(color = Color.Red)
) {
Text(text = "Text 1", modifier = Modifier.size(20.dp))
Text(text = "Text 2", modifier = Modifier.size(20.dp))
}

Когда я не устанавливаю размер, дочерние элементы располагаются в соответствии с необходимой им шириной и высотой, но родительский элемент размещается в полноэкранном режиме:
Код: Выделить всё
CustomComposable(
modifier = Modifier.background(color = Color.Red)
) {
Text(text = "Text 1")
Text(text = "Text 2")
}

Я хочу понять это поведение (почему это происходит, как я могу добиться, чтобы родительский элемент уважал свои ограничения, и если я устанавливаю размер дочернего элемента, он соблюдается, а если нет, то это занимает столько места, сколько ему нужно, до тех пор, пока ему не будет приказано соответствовать своему родительскому элементу, как в примере ниже) и как это обрабатывается в других составных объектах? Нравится эта колонка:
Код: Выделить всё
Column(
modifier = Modifier
.fillMaxSize()
.background(color = Color.Red)
) {
Text(text = "this is 1", modifier = Modifier.size(20.dp))
Text(text = "this is 2")
}
- Слева: столбец с собственным размером в виде максимальной ширины заполнения и его размер имеет свой собственный размер
- Справа: столбец без указания размера, но дочерний элемент со своим собственным размером

И последний вопрос: если мы передаем размер в CustomComposable и изменим его ширину и высоту в макете (newWidth, newHeight) {, изменятся ли размеры макета? Если нет, то есть ли смысл рассчитывать вручную? Как и всякий раз, когда кто-то отправляет его, будет установлен только указанный размер.
Подробнее здесь: https://stackoverflow.com/questions/784 ... constraint