Автоматическая высота Jetpack Compose Coil Image
Я пытаюсь показать изображение с шириной заполнения и автоматической высотой с помощью Jetpack Compose Coil. Я хочу, чтобы изображение получило полную ширину и автоматическую высоту. Но изображение отображается только тогда, когда я указываю фиксированную высоту.
Image(
painter = rememberImagePainter(
data = post.image
),
contentDescription = null,
contentScale = ContentScale.Crop,
modifier = Modifier.fillMaxWidth()
)
Я пробовал с
.fillMaxHeight()
а также
.fillMaxSize()
но это не работает. Есть ли способ добиться этого?
4 ответа
Это случается, когда один из представлений
width
/
height
рассчитывается как ноль, что означает, что он не должен отображаться и его не нужно загружать. Узнайте больше о причинах в этом выпуске на трекере сочинения.
Вы можете добавить
size(OriginalSize)
художнику
builder
. Это заставит изображение начать загрузку.
Image(
painter = rememberImagePainter(
data = post.image,
builder = {
size(OriginalSize)
},
),
contentDescription = null,
contentScale = ContentScale.Crop,
modifier = Modifier.fillMaxWidth()
)
Этот параметр заставляет ваше представление загружать и помещать в память полный размер изображения, не оптимизируя его для текущего представления. Так что используйте его осторожно, только если вы уверены, что изображение не будет слишком большим, и вы действительно не можете добавлять модификаторы размера. В зависимости от вида содержимого,
fillMaxWidth
/
fillMaxHeight
может хватить и без него.
С последним
val model = ImageRequest.Builder(LocalContext.current)
.data(imageUrl)
.size(Size.ORIGINAL)
.crossfade(true)
.build()
val painter = rememberAsyncImagePainter(model)
Image(
modifier = Modifier.fillMaxWidth(),
painter = painter,
contentDescription = null,
contentScale = ContentScale.FillWidth
)
Если ваше изображение
OriginalSize
слишком мало для вашего составного объекта, вы также можете использовать
scale(Scale.FIT)
в вашем строителе.
Ваше изображение будет максимально соответствовать вашему составному при сохранении соотношения сторон.
Image(
rememberImagePainter(
data = user?.photoUrl?:"",
builder = {
size(OriginalSize)
scale(Scale.FIT)
transformations(CircleCropTransformation())
}
),
contentDescription = "Picture",
contentScale = ContentScale.FillWidth
)
Вместо использования
size(OriginalSize)
что влияет на оптимизацию изображения, вы можете установить минимальную высоту/ширину для изображения (например, 1.dp). Это заставит изображение начать загрузку:
Image(
painter = rememberImagePainter(url),
contentDescription = null,
modifier = Modifier
.fillMaxWidth()
.defaultMinSize(minHeight = 1.dp),
)