Use Modifier.flex para controlar como um item muda de tamanho, ordem e alinhamento dentro de um FlexBox.
Tamanho do item
Use as funções basis, grow e shrink para controlar o tamanho de um item.
FlexBox { RedRoundedBox( modifier = Modifier.flex { basis(FlexBasis.Auto) grow(1.0f) shrink(0.5f) } ) }
Definir o tamanho inicial
Use basis para especificar o tamanho inicial do item antes que qualquer espaço extra seja distribuído. Você pode pensar nisso como o tamanho preferido do item.
Tipo de valor |
Comportamento |
Snippet de código Observação: as caixas têm um tamanho intrínseco máximo de |
Exemplo usando a largura do contêiner |
(padrão) |
Use o tamanho intrínseco máximo do item. Por exemplo, a largura intrínseca máxima de um elemento combinável |
FlexBox { RedRoundedBox( Modifier.flex { basis(FlexBasis.Auto) } ) BlueRoundedBox( Modifier.flex { basis(FlexBasis.Auto) } ) } |
|
|
Um tamanho fixo em dp. |
FlexBox { RedRoundedBox( Modifier.flex { basis(200.dp) } ) BlueRoundedBox( Modifier.flex { basis(100.dp) } ) } |
|
Porcentagem |
Uma porcentagem do tamanho do contêiner. |
FlexBox { RedRoundedBox( Modifier.flex { basis(0.7f) } ) BlueRoundedBox( Modifier.flex { basis(0.3f) } ) } |
|
Se o valor base for menor que o tamanho mínimo intrínseco do item, o tamanho mínimo intrínseco será usado. Por exemplo, se um item Text que contém uma palavra exigir 50dp para ser exibido, mas também tiver basis = 10.dp, um valor de 50dp será usado.
Aumentar itens quando houver espaço
Use grow para especificar o quanto um item aumenta quando há espaço extra. Esse é o espaço restante no contêiner FlexBox depois que todos os valores basis dos itens forem adicionados. O valor grow indica quanto do espaço extra um determinado filho vai receber, em relação aos irmãos. Por padrão, os itens não aumentam.
O exemplo a seguir mostra um FlexBox com três itens filhos. Cada um tem um valor base de 100dp. O primeiro filho tem um valor grow positivo. Como há apenas um filho com um valor grow, o valor real é irrelevante. Contanto que seja positivo, o filho recebe todo o espaço extra.
As imagens mostram o comportamento do FlexBox quando o tamanho do contêiner é 600dp.
FlexBox { RedRoundedBox( title = "400dp", modifier = Modifier.flex { grow(1f) } ) BlueRoundedBox(title = "100dp") GreenRoundedBox(title = "100dp") } |
Cada filho tem um valor base de
O filho 1 aumenta em
|
No exemplo a seguir, o tamanho do contêiner e o tamanho basis são os mesmos. A diferença é que cada filho tem um valor grow diferente.
FlexBox { RedRoundedBox( title = "150dp", modifier = Modifier.flex { grow(1f) } ) BlueRoundedBox( title = "200dp", modifier = Modifier.flex { grow(2f) } ) GreenRoundedBox( title = "250dp", modifier = Modifier.flex { grow(3f) } ) } |
Cada filho tem um valor base de
O valor total de crescimento é 6. O filho 1 aumenta em (1 / 6) * 300 = O filho 2 aumenta em (2 / 6) * 300 = O filho 3 aumenta em (3 / 6) * 300 =
|
Diminuir itens quando não houver espaço suficiente
Use shrink para especificar o quanto um item diminui quando o contêiner FlexBox não tem espaço suficiente para todos os itens. shrink funciona da mesma forma que grow, exceto que, em vez de distribuir espaço extra para itens, o déficit de espaço é distribuído para itens. O valor shrink especifica quanto do déficit de espaço o item recebe ou, melhor dizendo, quanto o item vai diminuir. Por padrão, os itens têm um valor shrink de 1f, o que significa que eles diminuem igualmente.
O exemplo a seguir mostra dois elementos combináveis Text com o mesmo texto. O primeiro filho tem um valor de redução de 1f, o que significa que ele diminui para absorver todo o déficit de espaço.
FlexBox { Text( "The quick brown fox", fontSize = 36.sp, modifier = Modifier .background(PastelRed) .flex { shrink(1f) } ) Text( "The quick brown fox", fontSize = 36.sp, modifier = Modifier .background(PastelBlue) .flex { shrink(0f) } ) }
À medida que o tamanho do contêiner diminui, o filho 1 também diminui.
Tamanho do contêiner |
Interface do FlexBox |
|
|
|
|
|
|
Alinhamento de itens
Use alignSelf para controlar como um item é alinhado ao eixo transversal. Isso
substitui a alignItems propriedade do contêiner para esse item. Ele tem todos os mesmos valores possíveis, além de Auto, que herda o comportamento do contêiner FlexBox.
Por exemplo, esse FlexBox tem alignItems definido como Start e cinco filhos que substituem o alinhamento do eixo transversal.
FlexBox( config = { alignItems(FlexAlignItems.Start) } ) { RedRoundedBox() BlueRoundedBox(modifier = Modifier.flex { alignSelf(FlexAlignSelf.Center) }) GreenRoundedBox(modifier = Modifier.flex { alignSelf(FlexAlignSelf.End) }) PinkRoundedBox(modifier = Modifier.flex { alignSelf(FlexAlignSelf.Stretch) }) OrangeRoundedBox(modifier = Modifier.flex { alignSelf(FlexAlignSelf.Baseline) }) }

Ordem dos itens
Por padrão, o FlexBox organiza os itens na ordem em que são declarados no código. Substitua esse comportamento usando order.
O valor padrão de order é zero, e o FlexBox classifica os itens com base nesse valor em ordem crescente. Todos os itens que têm o mesmo valor order são organizados na mesma ordem em que são declarados. Use valores order negativos e positivos para mover itens para o início ou o fim de um layout sem mudar o local em que eles são declarados.
O exemplo a seguir mostra dois itens filhos. O primeiro tem a order padrão de zero, e o segundo tem uma ordem de -1. Após a classificação, o filho 1 aparece depois do filho 2.
FlexBox { // Declared first, but will be placed after visually RedRoundedBox( title = "World" ) // Declared second, but will be placed first visually BlueRoundedBox( title = "Hello", modifier = Modifier.flex { order(-1) } ) }
