Com as guias, você pode organizar grupos de conteúdo relacionado. Há dois tipos de abas:
- Guias principais: são colocadas na parte de cima do painel de conteúdo, abaixo da barra de apps. Elas mostram os destinos de conteúdo principais e devem ser usadas quando apenas um conjunto de guias for necessário.
- Guias secundários: são usados em uma área de conteúdo para separar conteúdo relacionado e estabelecer hierarquia. Elas são necessárias quando uma tela exige mais de um nível de guias.

Esta página mostra como mostrar guias principais no app com telas relacionadas e navegação básica.
Superfície da API
Use os elementos combináveis Tab
, PrimaryTabRow
e SecondaryTabRow
para implementar guias. O elemento combinável Tab
representa uma guia individual na
linha e geralmente é usado dentro de um PrimaryTabRow
(para guias de indicador
primário) ou SecondaryTabRow
(para guias de indicador secundário).
O Tab
inclui os seguintes parâmetros principais:
selected
: determina se a guia atual está visualmente destacada.onClick()
: uma função lambda obrigatória que define a ação a ser realizada quando o usuário clica na guia. É aqui que você normalmente processa eventos de navegação, atualiza o estado da guia selecionada ou carrega o conteúdo correspondente.text
: mostra o texto na guia. Opcional.icon
: mostra um ícone na guia. Opcional.enabled
: controla se a guia está ativada e pode ser usada. Se definido como falso, a guia será mostrada em um estado desativado e não vai responder a cliques.
Exemplo: navegação baseada em guias
O snippet a seguir implementa uma barra de navegação na parte de cima com guias para navegar entre diferentes telas em um app:
@Composable fun NavigationTabExample(modifier: Modifier = Modifier) { val navController = rememberNavController() val startDestination = Destination.SONGS var selectedDestination by rememberSaveable { mutableIntStateOf(startDestination.ordinal) } Scaffold(modifier = modifier) { contentPadding -> PrimaryTabRow(selectedTabIndex = selectedDestination, modifier = Modifier.padding(contentPadding)) { Destination.entries.forEachIndexed { index, destination -> Tab( selected = selectedDestination == index, onClick = { navController.navigate(route = destination.route) selectedDestination = index }, text = { Text( text = destination.label, maxLines = 2, overflow = TextOverflow.Ellipsis ) } ) } } AppNavHost(navController, startDestination) } }
Pontos principais
- O
PrimaryTabRow
mostra uma linha horizontal de guias, com cada guia correspondente a umDestination
. val navController = rememberNavController()
cria e lembra de uma instância deNavHostController
, que gerencia a navegação em umNavHost
.var selectedDestination by rememberSaveable { mutableIntStateOf(startDestination.ordinal) }
gerencia o estado da guia selecionada no momento.startDestination.ordinal
recebe o índice numérico (posição) da entrada de tipo enumeradoDestination.SONGS
.
- Quando uma guia é clicada,
navController.navigate(route = destination.route)
é chamada para navegar até a tela correspondente. - A lambda
onClick
doTab
atualiza o estadoselectedDestination
para destacar visualmente a guia clicada. - Ele chama o elemento combinável
AppNavHost
, transmitindo onavController
estartDestination
, para mostrar o conteúdo real da tela selecionada.
Resultado
A imagem a seguir mostra o resultado do snippet anterior:
.png?hl=pt-br)