Aqui estão minhas duas prévias:
@Preview(showBackground = true)
@Composable
fun RegionsTest1() {
PromVendorsTheme {
Row(
horizontalArrangement = Arrangement.spacedBy(40.dp),
verticalAlignment = Alignment.CenterVertically,
modifier = Modifier
.padding(4.dp)
.fillMaxWidth()
) {
FilledTonalButton(
onClick = {
// TODO
}
) {
Text(
"See our listings",
maxLines = 1,
overflow = TextOverflow.Visible,
)
}
}
}
}
@Preview(showBackground = true)
@Composable
fun RegionsTest2() {
val location = "Long Island"
val state = "New York State"
PromVendorsTheme {
Row(
horizontalArrangement = Arrangement.spacedBy(40.dp),
verticalAlignment = Alignment.CenterVertically,
modifier = Modifier
.padding(4.dp)
.fillMaxWidth()
) {
Image(
painterResource(R.drawable.prom_vendors_long_island),
"Birds eye view of $location in $state",
contentScale = ContentScale.FillWidth,
modifier = Modifier
)
FilledTonalButton(
onClick = {
// TODO
}
) {
Text(
"See our listings",
maxLines = 1,
overflow = TextOverflow.Visible,
)
}
}
}
}
E como eles aparecem:
O botão de texto é definido exatamente da mesma maneira, sem nenhum modificador ou restrição de tamanho, exceto:
- Linha: fillMaxWidth()
- Imagem: ContentScale.FillWidth
Eu até tentei fazer
- Texto: TextOverflow.Visible
- FilledTonalButton: fillMaxWidth()
para consertar, e eles não mudaram nada.
Veja como eu quero que a linha se comporte no final: (o texto tem prioridade de largura, então a imagem ocupa o restante da largura disponível na tela dentro do preenchimento e a altura é dimensionada para manter uma proporção de 1:1. (imagem do Figma)
E minhas versões gradle/dependências para qualquer curioso:
[versions]
agp = "8.7.2"
firebaseBom = "33.12.0"
kotlin = "2.0.0"
coreKtx = "1.15.0"
junit = "4.13.2"
junitVersion = "1.2.1"
espressoCore = "3.6.1"
lifecycleRuntimeKtx = "2.8.7"
activityCompose = "1.10.0"
composeBom = "2024.04.01"
googleServices = "4.4.2"
material3AdaptiveNavigationSuiteAndroid = "1.3.0-rc01"
navigationCompose = "2.7.6"
O motivo pelo qual sua imagem está ocupando espaço é porque ela pode ser grande, ocupando todo o espaço.
Você pode dar peso igual aos dois elementos componíveis, para preencher o espaço da linha igualmente e dizer à imagem para preencher toda a largura. Se quiser manter a proporção, adicione esse modificador depois de restringir a largura da imagem.
você pode jogar com o modificador de peso conforme suas necessidades.