Mit Tabs können Sie Gruppen ähnlicher Inhalte organisieren. Es gibt zwei Arten von Tabs:
- Hauptabs: Sie werden oben im Inhaltsbereich unter einer oberen App-Leiste platziert. Sie enthalten die wichtigsten Inhaltsziele und sollten verwendet werden, wenn nur ein Tab-Set erforderlich ist.
- Sekundäre Tabs: Werden in einem Inhaltsbereich verwendet, um ähnliche Inhalte weiter zu trennen und eine Hierarchie zu schaffen. Sie sind erforderlich, wenn für einen Bildschirm mehr als eine Tabebene erforderlich ist.

Auf dieser Seite erfahren Sie, wie Sie Haupttabs in Ihrer App mit zugehörigen Bildschirmen und einfacher Navigation anzeigen.
API-Oberfläche
Verwenden Sie die Composeables Tab
, PrimaryTabRow
und SecondaryTabRow
, um Tabs zu implementieren. Das Tab
-Element stellt einen einzelnen Tab in der Zeile dar und wird in der Regel in einem PrimaryTabRow
(für primäre Indikatoren) oder SecondaryTabRow
(für sekundäre Indikatoren) verwendet.
Tab
umfasst die folgenden wichtigen Parameter:
selected
: Bestimmt, ob der aktuelle Tab visuell hervorgehoben wird.onClick()
: Eine erforderliche Lambda-Funktion, die die Aktion definiert, die ausgeführt werden soll, wenn der Nutzer auf den Tab klickt. Hier werden in der Regel Navigationsereignisse verarbeitet, der Status des ausgewählten Tabs aktualisiert oder entsprechende Inhalte geladen.text
: Zeigt Text auf dem Tab an. Optional:icon
: Auf dem Tab wird ein Symbol angezeigt. Optional:enabled
: Hiermit wird festgelegt, ob der Tab aktiviert ist und mit ihm interagiert werden kann. Ist „false“ festgelegt, wird der Tab deaktiviert angezeigt und reagiert nicht auf Klicks.
Beispiel: Tab-basierte Navigation
Im folgenden Snippet wird eine obere Navigationsleiste mit Tabs implementiert, über die zwischen verschiedenen Bildschirmen in einer App gewechselt werden kann:
@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) } }
Wichtige Fakten
PrimaryTabRow
zeigt eine horizontale Zeile mit Tabs an, wobei jeder Tab einemDestination
entspricht.val navController = rememberNavController()
erstellt und speichert eine Instanz vonNavHostController
, die die Navigation innerhalb einerNavHost
verwaltet.var selectedDestination by rememberSaveable { mutableIntStateOf(startDestination.ordinal) }
verwaltet den Status des aktuell ausgewählten Tabs.startDestination.ordinal
ruft den numerischen Index (die Position) desDestination.SONGS
-Eintrags ab.
- Wenn auf einen Tab geklickt wird, wird
navController.navigate(route = destination.route)
aufgerufen, um zum entsprechenden Bildschirm zu wechseln. - Das
onClick
-Lambda desTab
aktualisiert denselectedDestination
-Status, um den angeklickten Tab visuell hervorzuheben. - Es ruft das
AppNavHost
-Komposit auf und übergibtnavController
undstartDestination
, um den tatsächlichen Inhalt des ausgewählten Bildschirms anzuzeigen.
Ergebnis
Das folgende Bild zeigt das Ergebnis des vorherigen Snippets:
.png?hl=de)