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 automática, o alinhamento e os espaços entre os itens.

Direção do layout

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

  • Row (padrão): define o eixo principal como horizontal. Em localidades da esquerda para a direita, isso será da esquerda para a direita, com o oposto 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 transversal.

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 transversal 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 transversal vertical. Itens alinhados ao início do eixo cruzado. Itens alinhados ao final do eixo cruzado. Os itens são alinhados ao centro do eixo cruzado. Os itens são 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 transversal e distribuir espaço extra entre as linhas. Essa propriedade só se aplica quando há várias linhas (a quebra de linha está ativada). As imagens a seguir mostram o comportamento quando a direção é Row:

Ilustração de um eixo transversal 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ídas ao longo do eixo cruzado com espaço entre elas. Várias linhas de itens distribuídas ao longo do eixo cruzado com espaço ao redor delas.

Start

End

Center

Stretch

SpaceBetween

SpaceAround

Unir itens

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

Valor de FlexWrap

Exemplo usando a direção Row

NoWrap (padrão): impede que os itens sejam agrupados. Os itens transbordam se o tamanho principal for insuficiente.

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

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

Itens que se ajustam a uma nova linha abaixo porque o ajuste está ativado.

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

Os itens são movidos para uma nova linha acima porque o encapsulamento reverso está ativado.

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

Há 100dp de espaço disponível na linha. A criança 1 é 20dp. Como há espaço, o Filho 1 é colocado na linha.

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

Há 80dp de espaço disponível na linha. A lacuna é 8dp. A criança 2 tem 40dp. O espaço necessário é 48dp. Como há espaço, o intervalo e o filho 2 são colocados na linha.

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

Há 32dp espaço disponível na linha. A lacuna é 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 cabe na primeira.
Figura 3. O terceiro item foi colocado em uma nova linha porque não cabe na primeira.

Adicionar intervalos entre os itens

Adicione espaços 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 gap 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.