Почему положение прямоугольника меняется, когда сначала используется fillMaxSize(), а затем аспектRatio(1f)Android

Форум для тех, кто программирует под Android
Anonymous
Почему положение прямоугольника меняется, когда сначала используется fillMaxSize(), а затем аспектRatio(1f)

Сообщение Anonymous »

На самом деле я читаю этот ответ, но информации о соотношении сторон недостаточно.
RectangleScreen:

Код: Выделить всё

@Composable
fun RectangleScreen(modifier: Modifier) {
Canvas(modifier.border(7.dp , color = Color.Red)) {
drawRect(
Color.Black
)
}
}
Код 1:

Код: Выделить всё

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

Вернуться в «Android»