Почему положение прямоугольника меняется, когда сначала используется 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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