RectangleScreen:
Код: Выделить всё
@Composable
fun RectangleScreen(modifier: Modifier) {
Canvas(modifier.border(7.dp , color = Color.Red)) {
drawRect(
Color.Black
)
}
}
Код: Выделить всё
setContent {
RectangleScreen(modifier = Modifier
.aspectRatio(1.0f)
.border(7.dp , Color.Magenta)
.fillMaxSize()
.border(7.dp , Color.Yellow )
.padding(64.dp)
.border(7.dp , Color.Blue)
)
}
Код 2:
Код: Выделить всё
setContent {
RectangleScreen(modifier = Modifier
.fillMaxSize()
.border(7.dp , Color.Magenta)
.aspectRatio(1.0f)
.border(7.dp , Color.Yellow )
.padding(64.dp)
.border(7.dp , Color.Blue)
)
}
Мое понимание
код 1:
поскольку высота и ширина не указаны перед аспектомRatio(1f) и по умолчанию matchHeightConstraintsFirst: Boolean = false , поэтому он снова пытается определить размер содержимого по входящему ограничению: сначала проверьте Constraint.MaxWidth, затем Constraint.MaxHeight, а затем для minWidth, затем minHeight, поэтому ни одно из ограничений не является допустимым, поэтому в конце ограничения не будут соблюдаться, а размер содержимого будет таким, чтобы ограничения. maxWidth или ограничения. maxHeight соответствует (в зависимости от matchHeightConstraintsFirst).
Почему я получаю квадратный прямоугольник сверху?
код 2:
поскольку высота и ширина указываются перед аспектомRatio(1f) и по умолчанию matchHeightConstraintsFirst: Boolean = false , поэтому он пытается изменить размер содержимого в соответствии с указанным соотношением сторон как 1f , пытаясь сопоставить одно из входящих ограничений, чтобы первое ограничение это Constraint.MaxWidth, который, скажем, равен 1080.dp, чтобы поддерживать соотношение сторон, такое как высота: ширина, равное 1:1, поэтому наша высота будет 1080.dp, поэтому мы получаем квадратную форму.
почему положение квадрата находится в середине экрана
Мои вопросы:
Почему в коде 1 в верхней части экрана появляется квадрат?
Почему в Коде 2 квадрат появляется в центре экрана?
Как рассчитываются размер и положение в обоих случаях?
Подробнее здесь: https://stackoverflow.com/questions/790 ... io-in-jetp