Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

303
Views
¿Cómo nivelar la altura de los elementos en LazyVerticalGrid?

Estoy usando LazyVerticalGrid para mostrar la lista de elementos.

 LazyVerticalGrid( cells = GridCells.Fixed(2), modifier = Modifier.fillMaxSize(), state = listState, content = { Box(modifier = boxModifier) { ProductItemView( item = items[index] ) } } } )

A veces, algunos de mis artículos son más altos que los artículos a su lado (adjunto) ingrese la descripción de la imagen aquí

¿Cómo puedo ajustar la altura de todos los elementos? ¿O debería usar algo que no sea VerticalGrid ()?

over 4 years ago · Santiago Trujillo
3 answers
Answer question

0

Lo que sucede es que cualquier elemento que tenga texto de más de una línea, se expande

Para mantener una altura uniforme, debe establecer una altura mínima para cada Box secundario, para hacerlo, puede usar el Modifier como se muestra a continuación.

 //Adjust 200.dp as your requirement Box(modifier = Modifier.height(200.dp))

De esta forma, cada caja tendrá la misma altura independientemente de la longitud/tamaño del contenido.

over 4 years ago · Santiago Trujillo Report

0

Si le da una altura fija a sus Composables, puede terminar Composables que no muestren alguna parte de sus componibles secundarios, en su caso podría ser Componible de Text .

La primera y fácil manera es establecer una altura mínima Modifier.heightIn(min = 200.dp) , esto podría dejar espacio debajo o encima de su componible dependiendo de la alineación de su Caja, y si sus Componibles son más altos que 200.dp, tendrá el mismo efecto que tiene ahora, por lo que no es suficiente o agregar una altura fija no es suficiente.

La mejor manera es usar onTextLayout para obtener el recuento de líneas y la altura del texto para agregar un número menor de líneas como relleno como

 @Composable fun GridSnackCardWithTitle( modifier: Modifier = Modifier, snack: Snack, ) { Column( modifier = modifier .heightIn(min = 200.dp) .shadow(1.dp, shape = RoundedCornerShape(5.dp)) .background(Color.White), ) { val density = LocalDensity.current.density Image( contentScale = ContentScale.None, modifier = Modifier .fillMaxWidth() .aspectRatio(1f) .clip(RoundedCornerShape(8.dp)) .clickable { }, painter = rememberImagePainter( data = snack.imageUrl, builder = { placeholder(drawableResId = R.drawable.placeholder) } ), contentDescription = null ) Spacer(modifier = Modifier.height(4.dp)) var padding by remember { mutableStateOf(0.dp) } Text( modifier = Modifier.padding(start = 4.dp, end = 4.dp, bottom = padding), text = "Snack ${snack.name}", fontSize = 20.sp, onTextLayout = { val lineCount = it.lineCount val height = (it.size.height / density).dp println("lineCount: $lineCount, Height: $height") padding = if (lineCount > 1) 0.dp else height } ) } }

Resultado

ingrese la descripción de la imagen aquí

over 4 years ago · Santiago Trujillo Report

0

Por lo general, este problema se resuelve agregando Modifier.fillMaxHeight a los elementos que lo contienen y Modifier.height(IntrinsicSize.Max) al contenedor.

El problema es que en este caso no tenemos acceso al Modifier de contenedor: en Compose 1.1. * hay una Row en el código fuente, pero no podemos pasarle nuestro modificador, y en 1.2. * no hay Row en absoluto.

Creo que tal solicitud es justa, pero por ahora puedes hacerlo tú mismo en LazyColumn :

 val columnsCount = 2 val itemsCount = 10 LazyColumn( modifier = Modifier.fillMaxSize() ) { items((itemsCount + 1) / columnsCount) { i -> Row(Modifier.height(IntrinsicSize.Max)) { for (j in 0 until columnsCount) { val index = i * columnsCount + j if (index < itemsCount) { Text( LoremIpsum(index).values.first(), modifier = Modifier .fillMaxHeight() .weight(1f) .background( when (index % 3) { 0 -> Color.LightGray 1 -> Color.DarkGray else -> Color.Gray } ) ) } else { Spacer(Modifier.weight(1f)) } } } } }
over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!