Constraint Layout com Compose

João Gabriel
Android Dev BR
4 min readMar 9, 2021

--

Olá a todos! Neste artigo demonstrarei um pequeno comparativo entre o Constraint Layout do Jetpack Compose x Contraint Layout do AndroidX

Constraint Layouts nos ajudam a posicionar elementos na tela a partir de uma referência/âncora que esteja presente na tela.

Para utilizar Constraint Layouts precisamos adicionar a dependência no build.gradle do módulo app :

build.gradle com as dependências do Constraint Layout

Lembrando que para utilizar o Jetpack Compose é necessário utilizar a versão Preview(Cannary) do Android Studio

Centralizando um elemento na tela com Constraint Layout

  • AndroidX :

Código no XML para criar uma view e centralizar na tela com constraints

  • Jetpack Compose:

Para fazer o mesmo com Compose precisamos criar como container um ConstraintLayout e criar uma referência(id no modelo anterior) utilizando a função createRef(), e utilizar a função constrainAs do Modifier, passando a referência criada pelo createRef(), para definir as referências da nossa Box, e definir as constraints como no exemplo abaixo:

Alinhando elementos:

  • AndroidX:

Código do xml para alinhar 2 views na tela

  • Jetpack Compose:

Adicionei uma Box dentro do Constraint Layout e criei uma referência, mas dessa vez ao invés de utilizar o createRef(), utilizei o createRefs() e a desestruturação do kotlin, para obter as minhas 2 referências com 1 só chamada. E mudei as referências de parent para as refs criadas anteriormente:

Obtendo o seguinte resultado:

Guidelines:

  • AndroidX:
    Código escrito no xml para ter uma guideline horizontal com 20% de distância em relação ao topo.

Como fica a view:

  • Compose:
    Para criar uma guideline com compose, temos 4 funções principais:

No nosso exemplo criei só a guideline para o top com 0.5f(50%) de distância:

Obtendo o seguinte resultado:

Chain

Uma cadeia é um grupo de visualizações vinculadas umas às outras com restrições de posição bidirecionais. As visualizações em uma cadeia podem ser distribuídas vertical ou horizontalmente.
https://developer.android.com/training/constraint-layout/index.html#constrain-chain

AndroidX:
É necessário adicionar a propriedade chainStyle com os valores packed, spread ou spread_inside, no link acima tem a definição de cada uma delas.

Obtendo o seguinte resultado com chainStyle = packed:

Compose :

Dentro do ConstraintLayout é só chamar a função createVerticalChain(ou Horizontal), e passar como parâmetro as views que fazem parte dessa chain e o chainStyle como exemplo abaixo :

Obtendo o seguinte resultado:

Bom pessoal, essa foi uma pequena demonstração de como utilizar Constraint Layout do Jetpack Compose e uma comparação com o Contraint Layout do AndroidX.

Agradeço a todos por lerem até aqui, fiquem bem 😸.

--

--