Bottom Navigation : bases, BottomNavigationView et TabView

Auteur : IT Sectr Publié le : 2026-02-23 Temps de lecture : 11 min

Bottom Navigation est un modèle de navigation où le panneau de commutation des sections est situé en bas de l'écran. Sous Android, il est implémenté via BottomNavigationView (Material 3), sous iOS — via UITabBarController ou TabView dans SwiftUI. En savoir plus sur la spécification Material Design dans la documentation Material Design 3.

Points clés

  • Bottom Navigation — panneau inférieur pour basculer entre 3 à 5 sections principales de l'application
  • BottomNavigationView — composant Android Material 3 avec trois modes d'affichage des étiquettes
  • TabView — conteneur intégré SwiftUI pour créer une navigation inférieure avec des onglets
  • NavigationView + TabView — combinaison pour la navigation en pile dans chaque onglet
  • Material 3 — prise en charge des couleurs dynamiques, de l'animation de l'indicateur et des badges

Qu'est-ce que la Bottom Navigation ?

Bottom Navigation est un modèle de navigation où les sections principales de l'application sont accessibles via un panneau en bas de l'écran. Ce modèle est devenu un standard du design mobile grâce à sa facilité d'utilisation à une main. Contrairement à un menu latéral (Drawer), la Bottom Navigation est toujours visible et ne nécessite pas de gestes supplémentaires pour l'ouvrir.

Material Design 3 (2026) définit la Navigation Bar comme un composant avec trois états : default (icône + étiquette), labeled (étiquette agrandie, un onglet actif) et unlabeled (icônes uniquement). Google recommande la Navigation Bar pour les applications avec 3 à 5 sections équivalentes. Pour 6+ sections — Navigation Drawer. Dans SwiftUI pour iOS, TabView utilise automatiquement un panneau inférieur avec le style système.

Une étude d'UX Movement (2025) a montré que la Bottom Navigation améliore le temps d'exécution des tâches de 27% par rapport à un menu coulissant, car l'utilisateur voit toutes les sections disponibles sans actions supplémentaires. Le nombre de touches incorrectes diminue de 34% grâce à de grandes cibles tactiles (minimum 48x48 dp sur Android, 44x44 pt sur iOS).

BottomNavigationView sous Android (Material 3)

BottomNavigationView sous Android est un composant de la bibliothèque Material 3 (com.google.android.material.navigation.NavigationBarView). Il a remplacé l'ancien BottomNavigationView de Material 2 et ajouté la prise en charge des couleurs dynamiques Material You, de l'indicateur animé d'onglet actif et des badges intégrés. Le composant est configuré via un menu XML et est entièrement compatible avec Navigation Component.

kotlin
// Activité avec BottomNavigationView et NavHostFragment
class MainActivity : AppCompatActivity() {

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

        val navView = findViewById<NavigationBarView>(R.id.nav_view)
        val navController = findNavController(R.id.nav_host_fragment)

        // Synchronisation automatique de la navigation
        navView.setupWithNavController(navController)

        // Configuration du badge
        val badge = navView.getOrCreateBadge(R.id.navigation_messages)
        badge.number = 8
        badge.badgeGravity = BadgeDrawable.TOP_END
    }
}

// Menu XML pour Bottom Navigation (res/menu/bottom_nav_menu.xml)
// <?xml version="1.0" encoding="utf-8"?>
// <menu xmlns:android="http://schemas.android.com/apk/res/android">
//   <item android:id="@+id/navigation_home"
//     android:icon="@drawable/ic_home"
//     android:title="Accueil" />
//   <item android:id="@+id/navigation_messages"
//     android:icon="@drawable/ic_chat"
//     android:title="Chats" />
//   <item android:id="@+id/navigation_profile"
//     android:icon="@drawable/ic_person"
//     android:title="Profil" />
// </menu>

Material 3 NavigationBarView prend en charge trois modes labelVisibilityMode : LABEL_VISIBILITY_AUTO (par défaut — l'étiquette est affichée pour l'onglet actif), LABEL_VISIBILITY_LABELED (étiquettes pour tous), LABEL_VISIBILITY_UNLABELED (icônes uniquement). L'indicateur animé d'onglet actif est configuré via itemActiveIndicatorStyle avec un effet ripple personnalisé.

TabView dans SwiftUI pour iOS

TabView est un conteneur intégré SwiftUI pour créer une navigation inférieure. Chaque onglet est défini à l'aide du modificateur .tabItem avec une icône et du texte. TabView crée automatiquement un UITabBarController en interne et prend en charge toutes les fonctionnalités natives du panneau : badges, couleur des badges, animation de commutation et adaptation Dynamic Type.

swift
import SwiftUI

struct ContentView: View {
    var body: some View {
        TabView {
            HomeView()
                .tabItem {
                    Label("Accueil", systemImage: "house.fill")
                }
                .badge(3)

            SearchView()
                .tabItem {
                    Label("Rechercher", systemImage: "magnifyingglass")
                }

            NotificationsView()
                .tabItem {
                    Label("Notifications", systemImage: "bell.fill")
                }
                .badge("12")

            ProfileView()
                .tabItem {
                    Label("Profil", systemImage: "person.circle.fill")
                }
        }
    }
}

TabView prend en charge le modificateur .badge (iOS 15+), qui accepte Int (badge numérique) ou String (badge texte). La couleur du badge peut être modifiée via .badgeProminence(.increased) — rend le badge plus lumineux. L'animation de commutation des onglets est configurée via .tabViewStyle(.automatic) ou des styles personnalisés. Pour le contrôle programmatique de la commutation, @State avec selection est utilisé.

Combinaison de la navigation inférieure et en pile

Bottom Navigation est rarement utilisée seule — chaque onglet contient généralement un navigateur en pile (NavigationView/NavigationStack dans SwiftUI, NavHostFragment dans Android). Cette combinaison offre à l'utilisateur à la fois un accès rapide aux sections (Tab) et une navigation approfondie dans chaque section (Stack). C'est l'architecture standard pour les applications de production.

swift
struct AppTabView: View {
    var body: some View {
        TabView {
            NavigationStack {
                HomeView()
            }
            .tabItem {
                Label("Accueil", systemImage: "house")
            }

            NavigationStack {
                SearchView()
            }
            .tabItem {
                Label("Rechercher", systemImage: "magnifyingglass")
            }
        }
    }
}

// Dans HomeView — navigation en pile
struct HomeView: View {
    var body: some View {
        List(items) { item in
            NavigationLink("\(item.title)", value: item)
        }
        .navigationDestination(for: Item.self) { item in
            ItemDetailView(item: item)
        }
    }
}

Sous Android, la même combinaison est implémentée via NavHostFragment pour chaque onglet. Navigation Component automatise la création de la pile de retour pour chaque onglet : lors du changement d'onglet, l'état de la pile est préservé, et au retour — restauré. Cela offre une UX fluide, comme dans les applications système Google (Play Market, YouTube).

Material 3 : couleurs dynamiques et animations

Material 3 (Material You) introduit un changement clé dans la Bottom Navigation — des couleurs dynamiques générées à partir du fond d'écran de l'utilisateur. Le système extrait les couleurs dominantes du fond d'écran et crée une palette de 5 tons clés. NavigationBarView applique automatiquement ces couleurs : l'onglet actif reçoit la couleur primaire, les inactifs — la variante onSurface.

L'animation de l'indicateur d'onglet actif est devenue fluide : lors du changement, l'indicateur s'anime vers le nouvel onglet avec interpolation. L'effet ripple au toucher utilise la couleur secondaire. Bottom Navigation dans Material 3 prend également en charge les animations personnalisées via itemActiveIndicatorStyle — le développeur peut définir la forme (ovale, rectangle), les marges et la couleur de l'indicateur.

xml
<!-- Style de l'indicateur actif de NavigationBarView -->
<style name="Widget.MyApp.NavigationBarView.ActiveIndicator"
    parent="Widget.Material3.NavigationBarView.ActiveIndicator">
    <item name="android:height">32dp</item>
    <item name="android:width">64dp</item>
    <item name="android:marginHorizontal">8dp</item>
    <item name="shapeAppearance">
        @style/ShapeAppearance.Material3.Corner.Full
    </item>
    <item name="color">@color/primary_container</item>
</style>

Recommandations UX pour la Bottom Navigation

Lors de la conception de Bottom Navigation, la recherche en utilisabilité doit être prise en compte. NN Group (2026) : le panneau inférieur doit avoir au moins 56 dp de hauteur, les cibles tactiles — au moins 48 dp. Le texte des étiquettes — maximum 12 caractères (latin) ou 8 caractères (cyrillique). L'onglet actif doit différer non seulement par la couleur mais aussi par l'état de l'icône (remplie vs contour).

Material Design 3 recommande les modèles suivants : 4 onglets — optimal pour un balayage facile ; une icône "+" au centre (FloatingActionButton) — pour l'action principale ; les badges — uniquement pour les compteurs d'actions utilisateur. Éviter : utiliser la Bottom Navigation avec 2 onglets (utiliser plutôt Tab Layout), modifier dynamiquement l'ordre des onglets, masquer le panneau sur les écrans imbriqués.

  • Hauteur — minimum 56 dp pour une portée confortable du pouce
  • Contraste — l'onglet actif doit être distinguable (couleur + remplissage de l'icône)
  • Étiquettes — courtes, 1-2 mots, sans troncature (pas plus de 12 caractères)
  • Ordre — fixe, du plus important au moins important
  • Compteurs — uniquement pour les notifications utilisateur, pas pour le marketing

Questions fréquentes

Quelle est la différence entre Bottom Navigation et Navigation Drawer ?

Bottom Navigation — un panneau en bas de l'écran, toujours visible, pour 3 à 5 sections équivalentes. Navigation Drawer — un menu latéral invoqué par geste ou bouton, pour 6+ sections, paramètres et pages secondaires. Le Drawer masque le contenu, pas la Bottom Navigation.

Combien d'onglets sont optimaux pour la Bottom Navigation ?

4 onglets — optimal selon les données du NN Group. 3 — minimum pour justifier un panneau inférieur. 5 — maximum où tous les onglets restent distinguables. 6+ nécessite de passer au Navigation Drawer ou à un élément "Plus" sur iOS.

Comment implémenter un badge sur BottomNavigationView ?

Dans Android Material 3, utilisez getOrCreateBadge(itemId) sur NavigationBarView. Configurez le nombre via badge.number et la position via badgeGravity (TOP_END, TOP_START). Dans SwiftUI pour iOS — le modificateur .badge(Int) sur .tabItem. Dans UIKit — tabBarItem.badgeValue = "N".

Peut-on animer le changement d'onglets ?

Oui. Material 3 NavigationBarView anime le mouvement de l'indicateur d'onglet actif. SwiftUI TabView utilise l'animation système iOS. Pour les animations personnalisées de contenu, utilisez matchedGeometryEffect (SwiftUI) ou Transition (Jetpack Compose). L'animation du panneau de commutation elle-même est système.

La Bottom Navigation est-elle adaptée aux applications web ?

Oui, pour les applications mobile-first et PWA. Material Design 3 dispose d'un composant web Navigation Bar. Cependant, sur le bureau, il est préférable d'utiliser un panneau latéral (Side Navigation) — l'espace horizontal permet d'afficher plus d'éléments. La Bottom Navigation sur le bureau est un anti-modèle.

Résumé

  • Bottom Navigation — modèle de navigation mobile standard pour 3 à 5 sections principales
  • NavigationBarView (Android Material 3) et TabView (iOS SwiftUI) — implémentations modernes
  • Material 3 Dynamic Colors — génération automatique de palette de couleurs à partir du fond d'écran de l'utilisateur
  • Tab + Stack — combinaison de la navigation inférieure avec la navigation en pile dans chaque onglet pour l'architecture de production
  • Animation de l'indicateur — mouvement fluide de l'indicateur actif lors du changement d'onglets
  • Règles UX — hauteur 56 dp, 4 onglets, ordre fixe, onglet actif contrasté
  • Badges — prise en charge intégrée des indicateurs numériques et ponctuels sur les deux plateformes

Nous développerons une application mobile clé en main

IT Sectr crée des applications iOS et Android pour les startups et les entreprises depuis 2017. Nous vous conseillerons et vous proposerons la meilleure solution.

Discuter du projet

Lisez aussi