Über Drop-down-Menüs können Nutzer auf ein Symbol, ein Textfeld oder eine andere Komponente klicken und dann auf einer temporären Oberfläche eine Option aus einer Liste auswählen. In diesem Leitfaden wird beschrieben, wie Sie sowohl einfache als auch komplexere Menüs mit Trennlinien und Symbolen erstellen.
API-Oberfläche
Verwenden Sie die Komponenten DropdownMenu, DropdownMenuItem und IconButton, um ein benutzerdefiniertes Drop-down-Menü zu implementieren. Die DropdownMenu und
DropdownMenuItem Komponenten werden verwendet, um die Menüelemente anzuzeigen, während das
IconButton das Drop-down-Menü ein- oder ausblendet.
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 Regel zusammensetzbareDropdownMenuItem-Elemente enthält.
Die wichtigsten Parameter für DropdownMenuItem sind:
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
DropdownMenumit zwei Menüelementen. - Der Parameter
expandedsteuert, ob das Menü ein- oder ausgeblendet ist. - Der Parameter
onDismissRequestdefiniert einen Callback, der ausgeführt wird, wenn der Nutzer das Menü schließt. - Das zusammensetzbare Element
DropdownMenuItemstellt auswählbare Elemente im Drop-down-Menü dar. - Ein
IconButtonblendet das Menü ein und aus.
Ergebnis
Längeres Drop-down-Menü erstellen
DropdownMenu ist standardmäßig scrollbar, wenn nicht alle Menüelemente gleichzeitig angezeigt werden können. Das folgende Snippet erstellt ein längeres, scrollbares Drop-down-Menü:
@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
DropdownMenuist scrollbar, wenn die Gesamthöhe des Inhalts den verfügbaren Platz übersteigt. Dieser Code erstellt ein scrollbaresDropdownMenumit 100 Platzhalterelementen.- Die
forEach-Schleife generiert dynamisch zusammensetzbareDropdownMenuItem-Elemente. Die Elemente werden nicht verzögert erstellt. Das bedeutet, dass alle 100 Drop-down-Elemente erstellt werden und in der Komposition vorhanden sind. - Durch Klicken auf
IconButtonwird dasDropdownMenuein- und ausgeblendet. - Mit der
onClick-Lambda-Funktion in jedemDropdownMenuItemkö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 Trennlinien 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 Trennlinien 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... */ } ) } } }
Dieser Code definiert ein DropdownMenu in einem Box-Element.
Wichtige Punkte zum Code
- Mit den Parametern
leadingIconundtrailingIconwerden Symbole am Anfang und Ende einesDropdownMenuItemhinzugefügt. - Ein
IconButtonblendet das Menü ein. - Das
DropdownMenuenthält mehrere zusammensetzbareDropdownMenuItem-Elemente, die jeweils eine auswählbare Aktion darstellen. HorizontalDividerZusammensetzbare Elemente fügen eine horizontale Linie ein, um Gruppen von Menüelementen zu trennen.
Ergebnis
Das obige Snippet erzeugt ein Drop-down-Menü mit Symbolen und Trennlinien:
Zusätzliche Ressourcen
- Material Design: Menüs