Bottom Navigation — navigationsmönster där panelen för växling av sektioner finns längst ner på skärmen. I Android implementeras via BottomNavigationView (Material 3), i iOS — via UITabBarController eller TabView i SwiftUI. Läs mer om Material Design-specifikationen i dokumentationen för Material Design 3.
Huvudsakliga
Bottom Navigation — navigationsmönster där appens huvudsektioner är tillgängliga via en panel längst ner på skärmen. Detta mönster har blivit standard inom mobildesign tack vare bekvämligheten med enhandsanvändning. Till skillnad från sidomenyn (Drawer) är Bottom Navigation alltid synlig och kräver inga extra gester för att öppnas.
Material Design 3 (2026) definierar Navigation Bar som en komponent med tre tillstånd: default (ikon + etikett), labeled (förstorad etikett, en aktiv flik) och unlabeled (endast ikoner). Google rekommenderar Navigation Bar för appar med 3–5 likvärdiga sektioner. För 6+ sektioner — Navigation Drawer. I iOS SwiftUI använder TabView automatiskt bottenpanelen med systemstil.
UX Movement (2025) forskning visade: Bottom Navigation förbättrar uppgiftsutförandetiden med 27% jämfört med en utdragbar meny, eftersom användaren ser alla tillgängliga sektioner utan extra åtgärder. Antalet felaktiga tryck minskar med 34% tack vare stora tryckmål (minst 48x48 dp på Android, 44x44 pt på iOS).
BottomNavigationView i Android — komponent från Material 3 Library (com.google.android.material.navigation.NavigationBarView). Den ersatte den föråldrade BottomNavigationView från Material 2 och lade till stöd för dynamiska Material You-färger, animerad indikator för aktiv flik och inbyggda märken. Komponenten konfigureras via XML-meny och är fullt kompatibel med Navigation Component.
// Aktivitet med BottomNavigationView och 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)
// Automatisk navigationssynkronisering
navView.setupWithNavController(navController)
// Märkeskonfiguration
val badge = navView.getOrCreateBadge(R.id.navigation_messages)
badge.number = 8
badge.badgeGravity = BadgeDrawable.TOP_END
}
}
// XML-meny för 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="Hem" />
// <item android:id="@+id/navigation_messages"
// android:icon="@drawable/ic_chat"
// android:title="Chattar" />
// <item android:id="@+id/navigation_profile"
// android:icon="@drawable/ic_person"
// android:title="Profil" />
// </menu>Material 3 NavigationBarView stöder tre lägen för labelVisibilityMode: LABEL_VISIBILITY_AUTO (standard — etikett visas för aktiv flik), LABEL_VISIBILITY_LABELED (etiketter på alla), LABEL_VISIBILITY_UNLABELED (endast ikoner). Den animerade indikatorn för aktiv flik konfigureras via itemActiveIndicatorStyle med anpassad ripple-effekt.
TabView — inbyggd SwiftUI-container för att skapa bottennavigering. Varje flik definieras av .tabItem-modifieraren med ikon och text. TabView skapar automatiskt en UITabBarController under huven och stöder alla funktioner i den ursprungliga panelen: märken, märkesfärg, växlingsanimation och anpassning till Dynamic Type.
import SwiftUI
struct ContentView: View {
var body: some View {
TabView {
HomeView()
.tabItem {
Label("Hem", systemImage: "house.fill")
}
.badge(3)
SearchView()
.tabItem {
Label("Sök", systemImage: "magnifyingglass")
}
NotificationsView()
.tabItem {
Label("Aviseringar", systemImage: "bell.fill")
}
.badge("12")
ProfileView()
.tabItem {
Label("Profil", systemImage: "person.circle.fill")
}
}
}
}TabView stöder .badge-modifieraren (iOS 15+), som accepterar Int (numeriskt märke) eller String (textmärke). Märkets färg kan ändras via .badgeProminence(.increased) — gör märket ljusare. Växlingsanimationen för flikar konfigureras via .tabViewStyle(.automatic) eller anpassade stilar. För programmerad växlingskontroll används @State med selection.
Bottom Navigation används sällan ensam — varje flik innehåller vanligtvis en stacknavigator (NavigationView/NavigationStack i SwiftUI, NavHostFragment i Android). Denna kombination ger användaren både snabb åtkomst till sektioner (Tab) och djupnavigering inom varje sektion (Stack). Detta är standardarkitekturen för produktionsappar.
struct AppTabView: View {
var body: some View {
TabView {
NavigationStack {
HomeView()
}
.tabItem {
Label("Hem", systemImage: "house")
}
NavigationStack {
SearchView()
}
.tabItem {
Label("Sök", systemImage: "magnifyingglass")
}
}
}
}
// Inuti HomeView — stacknavigering
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)
}
}
}I Android implementeras samma kombination via NavHostFragment för varje flik. Navigation Component automatiserar skapandet av back stack för varje flik: vid växling av flikar sparas stackens tillstånd, vid återgång — återställs. Detta ger en sömlös UX, som i Googles systemappar (Play Market, YouTube).
Material 3 (Material You) medför en viktig förändring i Bottom Navigation — dynamiska färger genererade från användarens bakgrundsbild. Systemet extraherar dominerande färger från wallpaper och skapar en palett med 5 viktiga toner. NavigationBarView tillämpar automatiskt dessa färger: den aktiva fliken får primary-färg, de inaktiva — onSurface variant.
Animationen av den aktiva flikindikatorn har blivit smidig: vid växling flyttas indikatorn animerat till den nya fliken med interpolation. Ripple-effekten vid beröring använder secondary-färg. Bottom Navigation i Material 3 stöder också anpassade animationer via itemActiveIndicatorStyle — utvecklaren kan ställa in indikatorns form (oval, rektangel), marginaler och färg.
<!-- Stil för aktiv indikator 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>Vid utformning av Bottom Navigation bör användbarhetsstudier beaktas. NN Group (2026): bottenpanelen bör ha en höjd på minst 56 dp, tryckmål — minst 48 dp. Etiketttext — max 12 tecken (latinska) eller 8 tecken (kyrilliska). Den aktiva fliken bör skilja sig inte bara i färg utan även i ikonstatus (filled vs outlined).
Material Design 3 rekommenderar följande mönster: 4 flikar — optimalt för lugn skanning; „+“-symbol i mitten (FloatingActionButton) — för den primära åtgärden; märken — endast för räknare av användaråtgärder. Bör inte: använda Bottom Navigation med 2 flikar (bättre Tab Layout), ändra flikordningen dynamiskt, dölja panelen på kapslade skärmar.
Vanliga frågor
Bottom Navigation — panel längst ner på skärmen, alltid synlig, för 3–5 likvärdiga sektioner. Navigation Drawer — sidomeny, som aktiveras med en gest eller knapp, för 6+ sektioner, inställningar och sekundära sidor. Drawer döljer innehåll, Bottom Navigation — inte.
4 flikar — optimalt antal enligt NN Groups data. 3 — minimum för att motivera bottenpanelen. 5 — maximum där alla flikar förblir urskiljbara. 6+ kräver övergång till Navigation Drawer eller posten „Mer“ på iOS.
I Android Material 3, använd getOrCreateBadge(itemId) på NavigationBarView. Ställ in numret via badge.number och positionen via badgeGravity (TOP_END, TOP_START). I iOS SwiftUI — .badge(Int)-modifieraren på .tabItem. I UIKit — tabBarItem.badgeValue = "N".
Ja. Material 3 NavigationBarView animerar förflyttningen av den aktiva flikindikatorn. SwiftUI TabView använder iOS-systemanimation. För anpassade innehållsanimationer, använd matchedGeometryEffect (SwiftUI) eller Transition (Jetpack Compose). Animationen av själva växlingspanelen — systemets.
Ja, för mobile-first och PWA. Material Design 3 har en webbkomponent Navigation Bar. På skrivbordet är det dock bättre att använda en sidopanel (Side Navigation) — horisontellt utrymme gör att fler objekt kan visas. Bottom Navigation på skrivbordet är ett antimönster.
Sammanfattning
Vi utvecklar en mobil applikation nyckelfärdigt
IT Sectr skapar iOS- och Android-applikationer för startups och företag sedan 2017. Vi ger dig råd och föreslår den bästa lösningen.
Läs också