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)
)
}
квадратная форма RectangleScreen находится в верхней части экрана.
Код 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)
)
}
RectangleScreen имеет квадратную форму в середине экрана.
В коде 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 ... -aspectrat
Мобильная версия