image

Access unlimited bootcamps and 650+ courses forever

70
%OFF
Article image
Robson Lima
Robson Lima29/03/2026 11:20
Share
CI&T - Do Prompt ao AgenteRecommended for youCI&T - Do Prompt ao Agente

XML ou Jetpack Compose, eis a questão

  • #Android
  • #UI/UX

Layout XML vs Jetpack Compose

Qual abordagem usar no seu próximo projeto Android?

Robson Lima ● 8 min de leitura ● Android · Kotlin

Se você tá começando no desenvolvimento Android ou já mexeu um pouco, provavelmente se deparou com essa dúvida: devo usar XML ou Jetpack Compose? Ambos servem pra criar telas, mas funcionam de formas bem diferentes. Nesse artigo vou te mostrar como cada um funciona na prática, com código e tudo.

Desenvolvimento com Layout XML

O XML foi a forma padrão de criar interfaces no Android por muitos anos. A ideia é separar a interface (XML) da lógica (Kotlin/Java) em arquivos diferentes. Você desenha a tela num arquivo .xml e conecta os elementos na Activity ou Fragment via código.

Funciona bem, tem muito material na internet, e boa parte dos projetos legados ainda usa essa abordagem. O problema começa quando a UI fica complexa — o XML pode crescer muito e virar um pesadelo de manter.

activity_main.xml

<!-- Um layout simples com um título e um botão -->
<LinearLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:orientation="vertical"
  android:gravity="center"
  android:padding="24dp">

  <TextView
      android:id="@+id/tvTitle"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Olá, Android!"
      android:textSize="24sp"
      android:textStyle="bold" />

  <Button
      android:id="@+id/btnClick"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_marginTop="16dp"
      android:text="Clique aqui" />

</LinearLayout>

MainActivity.kt

class MainActivity : AppCompatActivity() {

  override fun onCreate(savedInstanceState: Bundle?) {
      super.onCreate(savedInstanceState)
      setContentView(R.layout.activity_main)

      // Conectando o botão via findViewById
      val button = findViewById<Button>(R.id.btnClick)
      val title  = findViewById<TextView>(R.id.tvTitle)

      button.setOnClickListener {
          title.text = "Você clicou! 🎉"
      }
  }
}

Atenção: O findViewById é antigo e pode lançar exceções em runtime. A maioria dos projetos modernos com XML já usa ViewBinding pra evitar esse problema.

Vantagens

  • Preview visual da tela no Android Studio
  • Muito conteúdo e documentação disponível
  • Curva de aprendizado mais suave pra quem vem do zero
  • Compatível com projetos mais antigos

Desvantagens

  • UI e lógica em arquivos separados (mais contexto pra ter em mente)
  • Código verboso pra layouts complexos
  • Reuso de componentes é mais trabalhoso
  • Menor performance em alguns cenários

Desenvolvimento com Jetpack Compose

Jetpack Compose é a abordagem moderna e declarativa pra criar UIs no Android. Em vez de descrever como montar a tela passo a passo, você declara o que a tela deve mostrar com base no estado atual. A UI se atualiza automaticamente quando o estado muda — sem precisar manipular Views manualmente.

Tudo é Kotlin puro, tudo no mesmo lugar. Componentes são funções anotadas com @Composable, e você pode combinar e reutilizar com muito mais facilidade do que no XML.

MainScreen.kt — Compose

// O mesmo exemplo do XML, agora em Compose
@Composable
fun MainScreen() {
  // Estado reativo — quando muda, a UI atualiza sozinha
  var title by remember { mutableStateOf("Olá, Android!") }

  Column(
      modifier = Modifier
          .fillMaxSize()
          .padding(24.dp),
      horizontalAlignment = Alignment.CenterHorizontally,
      verticalArrangement = Arrangement.Center
  ) {
      Text(
          text = title,
          fontSize = 24.sp,
          fontWeight = FontWeight.Bold
      )

      Spacer(modifier = Modifier.height(16.dp))

      Button(onClick = { title = "Você clicou! 🎉" }) {
          Text("Clique aqui")
      }
  }
}

// Reutilizando componentes fica simples assim:
@Composable
fun MyButton(label: String, onClick: () -> Unit) {
  Button(
      onClick = onClick,
      shape = RoundedCornerShape(12.dp),
      colors = ButtonDefaults.buttonColors(
          containerColor = MaterialTheme.colorScheme.primary
      )
  ) {
      Text(label)
  }
}

💡 Perceba que não existe arquivo XML. Todo o layout, estado e interações estão em Kotlin. O remember garante que o estado sobrevive a recomposições, e o mutableStateOf dispara a atualização da UI automaticamente.

Principais atributos e modificadores

// Modifier — equivalente aos atributos XML, mas em cadeia
Box(
  modifier = Modifier
      .fillMaxWidth()          // match_parent
      .height(120.dp)          // layout_height
      .padding(16.dp)          // padding
      .background(            // background color
          Color.Blue,
          shape = RoundedCornerShape(8.dp)
      )
      .clickable { /* ação */ }
) {
  Text(
      text = "Card interativo",
      color = Color.White,
      style = MaterialTheme.typography.titleMedium,
      modifier = Modifier.align(Alignment.Center)
  )
}

Critério XML Compose

Linguagem XML + Kotlin/Java Kotlin puro

Reatividade Manual (observers, LiveData) Nativa (State, recomposição)

Reuso de componentes Trabalhoso (custom views, includes) Simples (@Composable functions)

Curva de aprendizado Mais suave Requer mudar o mindset

Mercado (2024+) Legado / manutenção Novos projetos


Gostou do conteúdo?

Me segue nas redes pra não perder os próximos artigos sobre Android, Kotlin e arquitetura mobile.

GitHubLinkedIn

#Android #JetpackCompose #Kotlin

● Ilustração por Leonardo.ai, Artigo por Claude.ai com revisão humana

Share
Recommended for you
Cognizant - Mobile Developer
Accenture - Python para Análise e Automação de Dados
Lupo - Primeiros Passos com Inteligência Artificial
Comments (0)
Recommended for youCI&T - Do Prompt ao Agente