Каждый контейнер может быть вертикальным (столбец) или горизонтальным (строка), а такие компоненты, как текст, значки и изображения, отображаются на основе атрибутов JSON.
Вот упрощенный пример моего JSON:
Код: Выделить всё
{
"id": "productWrapper4",
"direction": "horizontal",
"components": [
{
"id": "rockiesLogo",
"width": 130,
"component": "image",
"url": "https://example.com/rockies-tv.png"
},
{
"id": "addIcon",
"component": "icon",
"name": "add"
},
{
"id": "mlbLogo",
"width": "100%",
"height": "100%",
"alignment": "left",
"component": "image",
"url": "https://example.com/mlb-tv.png"
}
]
}
Но в Android Jetpack Compose оно всегда масштабируется или обрезается, чтобы соответствовать ширине строки.
Вот что я получаю:

Платформа
Результат
Изображение MLB.TV выходит за край карточки (переполнение разрешено).
Изображение остается полностью внутри строки, уменьшаясь до нужного размера.
Ожидаемое (ссылка на iOS):

Код: Выделить всё
Row(
modifier = Modifier.fillMaxWidth(),
horizontalArrangement = Arrangement.spacedBy(0.dp)
) {
AsyncImage(
model = "https://example.com/rockies-tv.png",
contentDescription = null,
modifier = Modifier.width(130.dp)
)
Icon(Icons.Default.Add, contentDescription = null)
// MLB.TV logo — should overflow like in iOS
AsyncImage(
model = "https://example.com/mlb-tv.png",
contentDescription = null,
modifier = Modifier
.fillMaxWidth()
.graphicsLayer(clip = false), // Tried clip=false
contentScale = ContentScale.Fit,
alignment = Alignment.CenterStart
)
}
- Box-обертки с GraphicsLayer(clip = false) ~ хотя по умолчанию установлено значение false
- Пользовательский макет {} с Constraints.Infinity
- Использование всплывающего окна, привязанного к изображению
- Подкомпоновка макеты
- Использование отрицательных полей/смещений
Похоже, что Compose применяет ограничения ширины во время измерения, поэтому изображение никогда не отображается за пределами родительского элемента.
Как сделать так, чтобы компонуемый дочерний элемент (в данном случае изображение) визуально переполнялся вправо, за пределы измеренной ширины родительской строки — аналогично тому, как SwiftUI позволяет представлениям рисовать за пределами границ контейнера?
В идеале:
Родительский макет не должен расширяться, чтобы соответствовать размеру overflow.
Рядовые элементы в ряду не должны смещаться.
Только переполняющее изображение должно отображаться за пределами ширины родительского элемента.
Работает с динамическими макетами JSON (контейнеры создаются рекурсивно).>
Подробнее здесь: https://stackoverflow.com/questions/797 ... jetpack-co
Мобильная версия