Definir o comportamento do contêiner

Para configurar o comportamento do contêiner FlexBox, crie um bloco FlexBoxConfig e forneça-o usando o parâmetro config.

FlexBox(
    config = {
        direction(FlexDirection.Column)
        wrap(FlexWrap.Wrap)
        alignItems(FlexAlignItems.Center)
        alignContent(FlexAlignContent.SpaceAround)
        justifyContent(FlexJustifyContent.Center)
        gap(16.dp)
    }
) { // child items
}

Use FlexBoxConfig para definir a direção do layout, o comportamento de quebra de texto, o alinhamento e os espaços entre os itens.

Direção do layout

A função direction define o eixo principal, que determina a direção em que os itens são organizados. Ele aceita os seguintes valores:

  • Row (padrão): define o eixo principal como horizontal. Em locais da esquerda para a direita, a ordem é da esquerda para a direita, e o contrário em locais da direita para a esquerda.
  • RowReverse: inverte a direção de Row.
  • Column: define o eixo principal como vertical, de cima para baixo.
  • ColumnReverse: inverte a direção de Column.

Alinhar itens e distribuir espaço extra

As seções a seguir descrevem como alinhar itens e distribuir espaço extra ao longo dos eixos principal e cruzado.

Ao longo do eixo principal

Use justifyContent para distribuir itens ao longo do eixo principal. A tabela a seguir mostra o comportamento quando a direção é Row.

Ilustração de um eixo principal horizontal.

Start

Itens alinhados ao início do eixo principal.

Center

Itens alinhados ao centro do eixo principal.

End

Itens alinhados ao final do eixo principal.

SpaceBetween

Itens distribuídos ao longo do eixo principal com espaço entre eles.

SpaceAround

Itens distribuídos ao longo do eixo principal com espaço ao redor deles.

SpaceEvenly

Itens distribuídos ao longo do eixo principal com espaço uniforme ao redor deles.

Ao longo do eixo transversal

Use alignItems para alinhar itens ao longo do eixo cruzado em uma única linha. Esse comportamento pode ser substituído por itens individuais usando o modificador alignSelf.

As imagens a seguir mostram o comportamento quando a direção é Row:

Ilustração de um eixo cruzado vertical. Itens alinhados ao início do eixo cruzado. Itens alinhados ao final do eixo cruzado. Itens alinhados ao centro do eixo cruzado. Itens esticados para preencher o eixo cruzado. Itens alinhados ao valor de referência ao longo do eixo cruzado.

Start

End

Center

Stretch

Baseline

Use alignContent para alinhar linhas ao eixo cruzado e distribuir espaço extra entre elas. Essa propriedade só se aplica quando há várias linhas (o ajuste de texto está ativado). As imagens a seguir mostram o comportamento quando a direção é Row:

Ilustração de um eixo cruzado vertical. Várias linhas de itens alinhadas ao início do eixo cruzado. Várias linhas de itens alinhadas ao final do eixo cruzado. Várias linhas de itens alinhadas ao centro do eixo cruzado. Várias linhas de itens esticadas para preencher o eixo cruzado. Várias linhas de itens distribuídos ao longo do eixo cruzado com espaço entre eles. Várias linhas de itens distribuídos ao longo do eixo cruzado com espaço ao redor deles.

Start

End

Center

Stretch

SpaceBetween

SpaceAround

Unir itens

O agrupamento permite que um contêiner FlexBox se torne multilinha, movendo itens que não cabem para uma nova linha ou coluna ao longo do eixo cruzado. Configure o comportamento de quebra de texto usando wrap.

Valor FlexWrap

Exemplo usando a direção Row

NoWrap (padrão): impede que os itens sejam quebrados. Os itens vão transbordar se o tamanho principal for insuficiente.

Itens em uma única linha que transbordam o contêiner porque o ajuste de texto está desativado.

Wrap: quando não há espaço suficiente para um item (mais uma lacuna), uma nova linha é criada na direção do eixo cruzado. Por exemplo, se a direção for Row, uma nova linha será adicionada abaixo.

Os itens são quebrados em uma nova linha abaixo porque a quebra de texto está ativada.

WrapReverse: igual a Wrap, exceto que a nova linha é adicionada na direção oposta ao eixo cruzado. Por exemplo, se a direção for Row, uma nova linha será adicionada acima.

Os itens são quebrados em uma nova linha acima porque a quebra inversa está ativada.

O exemplo a seguir mostra como o algoritmo de ajuste de FlexBox funciona. O contêiner FlexBox tem um tamanho principal de 100dp, com wrap definido como FlexWrap.Wrap e uma lacuna de 8dp. Ele contém três itens com basis 20dp, 40dp e 50dp, respectivamente.

100dp espaço disponível na linha. A criança 1 é 20dp. Há espaço, então a criança 1 é colocada na linha.

Primeiro item colocado no contêiner FlexBox.
Figura 1. FlexBoxPrimeiro item colocado no contêiner.

80dp espaço disponível na fila. A diferença é de 8dp. A criança 2 é 40dp. O espaço necessário é 48dp. Há espaço, então a lacuna e o Child 2 são colocados na linha.

Primeiro item colocado no contêiner FlexBox.
Figura 2. Segundo item colocado no contêiner FlexBox após o primeiro.

32dp espaço disponível na linha. A diferença é de 8dp. A criança 3 é 50dp. O espaço necessário é 58dp. Não há espaço suficiente na linha atual, então o filho 3 é colocado em uma nova linha.

O terceiro item foi colocado em uma nova linha porque não cabia na primeira.
Figura 3. O terceiro item foi colocado em uma nova linha porque não coube na primeira.

Adicionar lacunas entre os itens

Adicione lacunas entre linhas e colunas usando rowGap e columnGap. Isso é útil para evitar a adição de modificadores de espaçamento aos filhos.

O espaçamento entre linhas adiciona espaço vertical entre os itens. O espaçamento entre colunas adiciona espaço horizontal entre os itens. O espaçamento adiciona espaço horizontal e vertical entre os itens.

rowGap

adiciona espaço vertical entre itens e linhas.

columnGap

adiciona espaço horizontal entre itens e linhas.

gap é uma função de conveniência que adiciona columnGap e rowGap.