Row no Jetpack Compose: o que é, propriedades composable e como funciona

Autor: IT Sectr Publicado: 2026-06-28 Tempo de leitura: 10 min

Row é uma função composable no Jetpack Compose para posicionar elementos filhos em uma linha horizontal. Ao contrário de Column, Row organiza os elementos da esquerda para a direita e suporta configuração de layout através dos parâmetros horizontalArrangement e verticalAlignment. De acordo com Google Android Documentation, 2025, Row é um dos três contêineres básicos do Compose junto com Column e Box e é usado para criar estruturas de interface horizontais: linhas de botões, campos de entrada e ícones com texto.

Principais conclusões

  • Row é um contêiner horizontal do Jetpack Compose que coloca elementos componíveis filhos em uma única linha da esquerda para a direita.
  • horizontalArrangement controla a distribuição dos elementos horizontalmente: uniformemente, com espaçamento ou no final do contêiner.
  • verticalAlignment alinha os elementos verticalmente em relação ao contêiner: superior, central ou inferior.
  • Modifier.weight permite distribuir o espaço disponível entre os elementos de Row proporcionalmente ao peso especificado.
  • Row é eficaz para criar linhas de botões, listas de ícones, campos de entrada e barras de ferramentas horizontais em interfaces móveis.

O que é Row no Jetpack Compose

Row é uma função composable que coloca elementos filhos em uma sequência horizontal. Na hierarquia de layouts do Compose, Row ocupa a posição de um contêiner básico junto com Column e Box.

Row não requer especificação de dimensões — ele se ajusta automaticamente ao seu conteúdo. A largura de Row é igual à soma das larguras dos elementos filhos incluindo o preenchimento, a menos que Modifier.fillMaxWidth ou um tamanho fixo seja especificado.

Os elementos filhos de Row podem ter seus próprios modificadores que afetam sua posição dentro do contêiner. Por exemplo, Modifier.weight permite que os elementos ocupem uma parte proporcional do espaço disponível.

De acordo com Android Developers Blog, 2024, Row processa os elementos filhos sequencialmente, calculando seus tamanhos com base nas regras de medição do Compose: primeiro os elementos sem weight são medidos, depois o espaço restante é distribuído entre os elementos com weight.

Sintaxe e assinatura básica de Row

A assinatura básica de Row inclui o parâmetro modifier, horizontalArrangement e verticalAlignment. Todos os elementos filhos são passados no bloco lambda de conteúdo final.

kotlin
@Composable
fun RowExample() {
    Row(
        modifier = Modifier.fillMaxWidth().padding(16.dp),
        horizontalArrangement = Arrangement.SpaceEvenly,
        verticalAlignment = Alignment.CenterVertically
    ) {
        Text(text = "Um")
        Text(text = "Dois")
        Text(text = "Três")
    }
}

Propriedades de Row: horizontalArrangement e verticalAlignment

O parâmetro horizontalArrangement determina como os elementos filhos são distribuídos ao longo do eixo horizontal dentro de Row. Os valores disponíveis incluem Start, End, Center, SpaceBetween, SpaceAround e SpaceEvenly da classe Arrangement.

Arrangement.Start coloca os elementos no início do contêiner, Arrangement.End — no final, e Arrangement.Center — no centro. Esses valores funcionam de forma semelhante à propriedade justify-content no CSS Flexbox.

Arrangement.SpaceBetween distribui os elementos uniformemente, colocando o primeiro elemento no início, o último no final e os demais com espaçamento igual entre eles. De acordo com Material Design Guidelines, 2025, SpaceBetween é ideal para barras de ferramentas e linhas de navegação.

O parâmetro verticalAlignment alinha os elementos verticalmente. Os valores disponíveis incluem Alignment.Top, Alignment.CenterVertically e Alignment.Bottom. Esta propriedade é útil quando os elementos de Row têm alturas diferentes — por exemplo, um ícone ao lado de texto multilinha.

Tabela de valores de Arrangement

ValorDescriçãoUso
StartElementos são empurrados para o início de RowLinhas alinhadas à esquerda
CenterElementos centralizados no contêinerMenus horizontais, cabeçalhos
SpaceBetweenUniformemente com primeiro no início e último no finalBarras de ferramentas, navegação
SpaceEvenlyEspaçamento igual entre elementos e nas bordasLinhas de botões, grades uniformes
SpaceAroundEspaçamento igual entre elementos, meio espaçamento nas bordasCarrosséis, galerias de ícones

Distribuição de espaço com Modifier.weight

Modifier.weight é um modificador disponível apenas dentro de Row e Column que distribui o espaço disponível entre os elementos filhos proporcionalmente ao valor especificado. Se um elemento tem peso 1.0f e outro 2.0f, o segundo elemento ocupará o dobro do espaço.

Elementos sem weight ocupam o espaço necessário para seu conteúdo. O espaço restante é distribuído entre os elementos com weight proporcionalmente ao seu peso. Este comportamento é semelhante à propriedade flex-grow no CSS Flexbox.

De acordo com Android Developer Documentation, 2025, o weight funciona apenas dentro de Row, Column e BoxWithConstraints. Ao usar weight em Row, todos os elementos filhos são medidos em duas passadas: primeiro os elementos sem weight, depois os elementos com weight.

kotlin
@Composable
fun WeightExample() {
    Row(
        modifier = Modifier.fillMaxWidth(),
        horizontalArrangement = Arrangement.Start
    ) {
        Text(
            text = "Esquerda",
            modifier = Modifier.weight(1.0f)
        )
        Text(text = "Direita")
    }
}

Exemplos de código com Row

O primeiro exemplo demonstra Row com um ícone e texto — um cenário típico para uma lista de contatos ou configurações. Icon e Text são envolvidos em Row com verticalAlignment centralizado.

kotlin
@Composable
fun IconWithText() {
    Row(
        verticalAlignment = Alignment.CenterVertically,
        modifier = Modifier.padding(8.dp)
    ) {
        Icon(
            imageVector = Icons.Default.Favorite,
            contentDescription = "Favorite"
        )
        Spacer(modifier = Modifier.width(8.dp))
        Text(text = "Adicionar aos favoritos")
    }
}

O segundo exemplo mostra Row com botões e distribuição uniforme. SpaceEvenly garante espaçamento igual entre todos os botões e as bordas do contêiner.

kotlin
@Composable
fun ButtonRow() {
    Row(
        modifier = Modifier.fillMaxWidth().padding(16.dp),
        horizontalArrangement = Arrangement.SpaceEvenly
    ) {
        Button(onClick = {}) { Text("Cancelar") }
        Button(onClick = {}) { Text("Salvar") }
    }
}

O terceiro exemplo — Row dentro de um Card para exibir uma classificação. Um Row aninhado com Modifier.weight permite que a estrela de classificação e o valor numérico ocupem espaço fixo.

kotlin
@Composable
fun RatingRow(rating: Float) {
    Row(
        verticalAlignment = Alignment.CenterVertically
    ) {
        Text(
            text = "Classificação:",
            modifier = Modifier.weight(1.0f)
        )
        Text(text = "$rating / 5.0")
    }
}

Características de Row em layout adaptativo

Row requer controle de largura em layout adaptativo. Se o conteúdo de Row exceder a largura disponível da tela, os elementos podem transbordar os limites do contêiner. Para evitar isso, use Modifier.horizontalScroll ou mude para Column.

Ao combinar Row com Modifier.weight, é importante definir fillMaxWidth para o Row pai — caso contrário, o weight distribuirá espaço inexistente. De acordo com Material Design Guidelines, 2025, Row com weight sem fillMaxWidth é considerado uma configuração inválida.

Para interfaces adaptativas, recomenda-se combinar Row com Box ou usar Arrangement.SpaceBetween para distribuição automática de elementos em diferentes tamanhos de tela. Isso proporciona flexibilidade sem consultas de mídia.

  • Modifier.horizontalScroll — adiciona rolagem quando Row transborda
  • Modifier.weight — distribui espaço proporcionalmente
  • Arrangement.SpaceBetween — distribuição adaptativa com fixação nas bordas

Perguntas frequentes

Como Row é diferente de Column no Jetpack Compose?

Row coloca elementos horizontalmente (da esquerda para a direita), enquanto Column os coloca verticalmente (de cima para baixo). Row substitui LinearLayout com orientação horizontal da abordagem View antiga, e Column substitui LinearLayout vertical.

Como fazer uma Row rolável?

Adicione o modificador Modifier.horizontalScroll à Row. Para listas grandes com carregamento lento, use LazyRow — ele renderiza apenas os elementos visíveis e os recicla durante a rolagem.

Row pode ser aninhada dentro de outra Row?

Sim, Row pode ser aninhada dentro de outra Row, Column ou Box. Ao aninhar, lembre-se de que a Row interna receberá sua largura do contêiner pai e, se necessário, defina fillMaxWidth para cada nível.

O que Modifier.weight faz em Row?

Modifier.weight distribui o espaço restante em Row entre os elementos filhos proporcionalmente ao peso especificado. Um elemento com peso 2.0f terá o dobro da largura de um elemento com peso 1.0f. O weight funciona apenas dentro de Row e Column.

Como centralizar verticalmente os elementos de Row?

Use o parâmetro verticalAlignment = Alignment.CenterVertically ao criar Row. Isso alinhará todos os elementos filhos ao longo do eixo vertical independentemente de sua altura.

Resumo

  • Row é um contêiner horizontal do Compose para colocar elementos em uma linha da esquerda para a direita com arranjo e alinhamento personalizáveis.
  • horizontalArrangement controla a distribuição horizontal dos elementos: Start, Center, End, SpaceBetween, SpaceEvenly e SpaceAround.
  • verticalAlignment alinha os elementos verticalmente via Alignment.Top, CenterVertically ou Bottom.
  • Modifier.weight distribui espaço livre entre os elementos proporcionalmente ao peso especificado, similar ao flex-grow em CSS.
  • Row suporta aninhamento, rolagem via Modifier.horizontalScroll e funciona com outros contêineres do Compose.
  • Em layout adaptativo, é importante definir Modifier.fillMaxWidth para Row com weight, caso contrário os elementos não distribuirão o espaço corretamente.
  • Para listas horizontais com muitos elementos, use LazyRow em vez de Row para desempenho ideal.

Vamos desenvolver um aplicativo móvel chave na mão

A IT Sectr cria aplicativos para iOS e Android para startups e empresas desde 2017. Nós vamos aconselhá-lo e propor a melhor solução.

Discutir o projeto

Leia também