As guias permitem organizar grupos de conteúdo relacionado. Há dois tipos de guias:
- Guias principais: colocadas na parte de cima do painel de conteúdo, abaixo de uma barra de apps. Elas mostram os principais destinos de conteúdo e devem ser usadas quando apenas um conjunto de guias é necessário.
- Guias secundárias: usadas em uma área de conteúdo para separar ainda mais o conteúdo relacionado e estabelecer uma hierarquia. Elas são necessárias quando uma tela requer mais de um nível de guias.
Nesta página, mostramos como exibir 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
principal) ou SecondaryTabRow (para guias de indicador secundário).
O Tab inclui os seguintes parâmetros principais:
selected: determina se a guia atual está destacada visualmente.onClick(): uma função lambda obrigatória que define a ação a ser executada quando o usuário clica na guia. É aqui que você geralmente 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 definida como falsa, a guia vai aparecer em um estado desativado e não vai responder a cliques.
Exemplo: navegação baseada em guias
O snippet abaixo 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
PrimaryTabRowexibe uma linha horizontal de guias, em que cada guia corresponde a umDestination.val navController = rememberNavController()cria e lembra uma instância deNavHostController, que gerencia a navegação em umNavHost.var selectedDestination by rememberSaveable { mutableIntStateOf(startDestination.ordinal) }gerencia o estado da guia selecionada.startDestination.ordinalrecebe o índice numérico (posição) da entrada do tipo enumeradoDestination.SONGS.
- Quando você clica em uma guia, a lambda
onClickchamanavController.navigate(route = destination.route)para navegar até a tela correspondente. - A lambda
onClickdoTabatualiza o estadoselectedDestinationpara destacar visualmente a guia clicada. - Ele chama o elemento combinável
AppNavHost, transmitindonavControllerestartDestination, para mostrar o conteúdo real da tela selecionada.
Resultado
A imagem a seguir mostra o resultado do snippet anterior:
.png?hl=pt-br)