Definir o comportamento do contêiner

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

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 linha, o alinhamento e as lacunas entre os itens.

Direção do layout

A propriedade direction define o eixo principal, que determina a direção em que os itens são dispostos.

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

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 à linha de base ao longo do eixo cruzado.

Start

End

Center

Stretch

Baseline

Use alignContent para alinhar linhas ao eixo transversal e distribuir espaço extra entre elas. 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 cruzado vertical. Várias linhas de itens alinhadas ao início do eixo cruzado. Várias linhas de itens alinhados 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

A quebra de linha permite que um FlexBox contêiner 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.

FlexWrap valor

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 qualquer lacuna), uma nova linha é criada na direção do eixo transversal. 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 transversal. 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 quebra de linha 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 de espaço disponível na linha. O filho 1 é 20dp. Há espaço, então o filho 1 é colocado na linha.

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

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

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

32dp de espaço disponível na linha. A lacuna é 8dp. O filho 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 coube na primeira.
Figura 3. Terceiro item colocado em uma nova linha porque não cabe na primeira linha.

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.