Açılır menüler, kullanıcıların bir simgeyi, metin alanını veya başka bir bileşeni tıklayıp geçici bir yüzeydeki seçenekler listesinden seçim yapmasına olanak tanır. Bu kılavuzda, hem temel menülerin hem de ayırıcılar ve simgeler içeren daha karmaşık menülerin nasıl oluşturulacağı açıklanmaktadır.
API yüzeyi
Özel bir açılır menü uygulamak için DropdownMenu, DropdownMenuItem ve IconButton bileşenlerini kullanın. DropdownMenu ve DropdownMenuItem bileşenleri menü öğelerini görüntülemek için kullanılırken IconButton, açılır menüyü görüntülemek veya gizlemek için tetikleyici görevi görür.
DropdownMenu bileşeninin temel parametreleri şunlardır:
expanded: Menünün görünür olup olmadığını gösterir.onDismissRequest: Menüyü kapatmak için kullanılır.content: Menünün birleştirilebilir içeriği. GenellikleDropdownMenuItembirleştirilebilir öğeleri içerir.
DropdownMenuItem için temel parametreler şunlardır:
text: Menü öğesinde gösterilen içeriği tanımlar.onClick: Menüdeki öğeyle etkileşimi yönetmek için geri çağırma.
Temel bir açılır menü oluşturma
Aşağıdaki snippet'te minimum DropdownMenu uygulaması gösterilmektedir:
@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... */ } ) } } }
Kodla ilgili önemli noktalar
- İki menü öğesi içeren temel bir
DropdownMenutanımlar. expandedparametresi, menünün görünürlüğünü genişletilmiş veya daraltılmış olarak kontrol eder.onDismissRequestparametresi, kullanıcı menüyü kapattığında yürütülen bir geri çağırma işlevini tanımlar.DropdownMenuItemcomposable'ı, açılır menüdeki seçilebilir öğeleri temsil eder.IconButton, menünün genişletilmesini ve daraltılmasını tetikler.
Sonuç
Daha uzun bir açılır menü oluşturma
Tüm menü öğeleri aynı anda gösterilemiyorsa DropdownMenu varsayılan olarak kaydırılabilir. Aşağıdaki snippet, daha uzun ve kaydırılabilir bir açılır menü oluşturur:
@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... */ } ) } } } }
Kodla ilgili önemli noktalar
- İçeriğinin toplam yüksekliği kullanılabilir alanı aştığında
DropdownMenukaydırılabilir. Bu kod, 100 yer tutucu öğe gösteren kaydırılabilir birDropdownMenuoluşturur. forEachdöngüsü,DropdownMenuItemcomposable'ları dinamik olarak oluşturur. Öğeler geç oluşturulmaz. Yani 100 açılır öğenin tamamı oluşturulur ve oluşturmada yer alır.IconButtontıklandığındaDropdownMenugenişletilir ve daraltılır.- Her
DropdownMenuItemiçindekionClicklambda, kullanıcı bir menü öğesini seçtiğinde gerçekleştirilen işlemi tanımlamanıza olanak tanır.
Sonuç
Yukarıdaki kod snippet'i aşağıdaki kaydırılabilir menüyü oluşturur:
Ayırıcılar içeren daha uzun bir açılır menü oluşturma
Aşağıdaki snippet, açılır menünün daha gelişmiş bir uygulamasını göstermektedir. Bu snippet'te, menü öğelerine başta ve sonda simgeler eklenir ve ayırıcılar menü öğesi gruplarını ayırır.
@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... */ } ) } } }
Bu kod, Box içinde bir DropdownMenu tanımlar.
Kodla ilgili önemli noktalar
leadingIconvetrailingIconparametreleri,DropdownMenuItemöğesinin başına ve sonuna simgeler ekler.IconButton, menünün genişletilmesini tetikler.DropdownMenu, her biri seçilebilir bir işlemi temsil eden birkaçDropdownMenuItembileşeni içerir.HorizontalDividerbileşenleri, menü öğesi gruplarını ayırmak için yatay bir çizgi ekler.
Sonuç
Yukarıdaki snippet, simgeler ve ayırıcılar içeren bir açılır menü oluşturur:
Ek kaynaklar
- Materyal Tasarım: Menüler