Über Drop-down-Menüs können Nutzer auf ein Symbol, ein Textfeld oder eine andere Komponente klicken und dann aus einer Liste mit Optionen auf einer temporären Oberfläche auswählen. In diesem Leitfaden wird beschrieben, wie Sie sowohl einfache als auch komplexere Menüs mit Trennzeichen und Symbolen erstellen.

API-Oberfläche
Verwenden Sie die Komponenten DropdownMenu
, DropdownMenuItem
und IconButton
, um ein benutzerdefiniertes Drop-down-Menü zu implementieren. Die Komponenten DropdownMenu
und DropdownMenuItem
werden verwendet, um die Menüpunkte anzuzeigen, während IconButton
der Trigger zum Ein- oder Ausblenden des Drop-down-Menüs ist.
Die wichtigsten Parameter für die Komponente DropdownMenu
sind:
expanded
: Gibt an, ob das Menü sichtbar ist.onDismissRequest
: Wird verwendet, um das Schließen des Menüs zu verarbeiten.content
: Der zusammensetzbare Inhalt des Menüs, der in der RegelDropdownMenuItem
-Composables enthält.
Zu den wichtigsten Parametern für DropdownMenuItem
gehören:
text
: Definiert den Inhalt, der im Menüelement angezeigt wird.onClick
: Callback zur Verarbeitung der Interaktion mit dem Element im Menü.
Einfaches Drop-down-Menü erstellen
Das folgende Snippet zeigt eine minimale DropdownMenu
-Implementierung:
@Composable fun MinimalDropdownMenu() { var expanded by remember { mutableStateOf(false) } Box( modifier = Modifier .padding(16.dp) ) { IconButton(onClick = { expanded = !expanded }) { Icon(Icons.Default.MoreVert, contentDescription = "More options") } DropdownMenu( expanded = expanded, onDismissRequest = { expanded = false } ) { DropdownMenuItem( text = { Text("Option 1") }, onClick = { /* Do something... */ } ) DropdownMenuItem( text = { Text("Option 2") }, onClick = { /* Do something... */ } ) } } }
Wichtige Punkte zum Code
- Definiert ein einfaches
DropdownMenu
mit zwei Menüelementen. - Mit dem Parameter
expanded
wird die Sichtbarkeit des Menüs als maximiert oder minimiert gesteuert. - Der Parameter
onDismissRequest
definiert einen Callback, der ausgeführt wird, wenn der Nutzer das Menü schließt. - Die zusammensetzbare Funktion
DropdownMenuItem
stellt auswählbare Elemente im Drop-down-Menü dar. - Ein
IconButton
löst das Maximieren und Minimieren des Menüs aus.
Ergebnis

Längeres Drop-down-Menü erstellen
DropdownMenu
ist standardmäßig scrollbar, wenn nicht alle Menüelemente gleichzeitig angezeigt werden können. Mit dem folgenden Snippet wird ein längeres Drop-down-Menü mit Scrollfunktion erstellt:
@Composable fun LongBasicDropdownMenu() { var expanded by remember { mutableStateOf(false) } // Placeholder list of 100 strings for demonstration val menuItemData = List(100) { "Option ${it + 1}" } Box( modifier = Modifier .padding(16.dp) ) { IconButton(onClick = { expanded = !expanded }) { Icon(Icons.Default.MoreVert, contentDescription = "More options") } DropdownMenu( expanded = expanded, onDismissRequest = { expanded = false } ) { menuItemData.forEach { option -> DropdownMenuItem( text = { Text(option) }, onClick = { /* Do something... */ } ) } } } }
Wichtige Punkte zum Code
DropdownMenu
ist scrollbar, wenn die Gesamthöhe des Inhalts den verfügbaren Platz überschreitet. Mit diesem Code wird ein scrollbarerDropdownMenu
erstellt, in dem 100 Platzhalterelemente angezeigt werden.- In der
forEach
-Schleife werdenDropdownMenuItem
-Composables dynamisch generiert. Die Elemente werden nicht verzögert erstellt. Das bedeutet, dass alle 100 Dropdown-Elemente erstellt werden und in der Komposition vorhanden sind. - Das
IconButton
löst das Ein- und Ausblenden desDropdownMenu
aus, wenn darauf geklickt wird. - Mit der
onClick
-Lambda-Funktion in jedemDropdownMenuItem
können Sie die Aktion definieren, die ausgeführt wird, wenn der Nutzer ein Menüelement auswählt.
Ergebnis
Das obige Code-Snippet erzeugt das folgende scrollbare Menü:

Längeres Drop-down-Menü mit Trennzeichen erstellen
Das folgende Snippet zeigt eine erweiterte Implementierung eines Drop-down-Menüs. In diesem Snippet werden Menüelementen führende und nachfolgende Symbole hinzugefügt und Gruppen von Menüelementen durch Trennzeichen getrennt.
@Composable fun DropdownMenuWithDetails() { var expanded by remember { mutableStateOf(false) } Box( modifier = Modifier .fillMaxWidth() .padding(16.dp) ) { IconButton(onClick = { expanded = !expanded }) { Icon(Icons.Default.MoreVert, contentDescription = "More options") } DropdownMenu( expanded = expanded, onDismissRequest = { expanded = false } ) { // First section DropdownMenuItem( text = { Text("Profile") }, leadingIcon = { Icon(Icons.Outlined.Person, contentDescription = null) }, onClick = { /* Do something... */ } ) DropdownMenuItem( text = { Text("Settings") }, leadingIcon = { Icon(Icons.Outlined.Settings, contentDescription = null) }, onClick = { /* Do something... */ } ) HorizontalDivider() // Second section DropdownMenuItem( text = { Text("Send Feedback") }, leadingIcon = { Icon(Icons.Outlined.Feedback, contentDescription = null) }, trailingIcon = { Icon(Icons.AutoMirrored.Outlined.Send, contentDescription = null) }, onClick = { /* Do something... */ } ) HorizontalDivider() // Third section DropdownMenuItem( text = { Text("About") }, leadingIcon = { Icon(Icons.Outlined.Info, contentDescription = null) }, onClick = { /* Do something... */ } ) DropdownMenuItem( text = { Text("Help") }, leadingIcon = { Icon(Icons.AutoMirrored.Outlined.Help, contentDescription = null) }, trailingIcon = { Icon(Icons.AutoMirrored.Outlined.OpenInNew, contentDescription = null) }, onClick = { /* Do something... */ } ) } } }
Mit diesem Code wird ein DropdownMenu
in einem Box
definiert.
Wichtige Punkte zum Code
- Mit den Parametern
leadingIcon
undtrailingIcon
werden Symbole am Anfang und Ende einesDropdownMenuItem
hinzugefügt. - Durch ein
IconButton
wird das Menü maximiert. - Die
DropdownMenu
enthält mehrereDropdownMenuItem
-Composables, die jeweils eine auswählbare Aktion darstellen. - Mit
HorizontalDivider
-Composables wird eine horizontale Linie eingefügt, um Gruppen von Menüelementen zu trennen.
Ergebnis
Mit dem vorangegangenen Snippet wird ein Drop-down-Menü mit Symbolen und Trennzeichen erstellt:

Zusätzliche Ressourcen
- Material Design: Menüs