1
+ @file:OptIn(ExperimentalMaterialApi ::class )
2
+
3
+ package com.smarttoolfactory.tutorial3_1navigation
4
+
5
+ import androidx.compose.foundation.layout.fillMaxWidth
6
+ import androidx.compose.foundation.layout.padding
7
+ import androidx.compose.material.DropdownMenuItem
8
+ import androidx.compose.material.ExperimentalMaterialApi
9
+ import androidx.compose.material.ExposedDropdownMenuBox
10
+ import androidx.compose.material.ExposedDropdownMenuDefaults
11
+ import androidx.compose.material.Text
12
+ import androidx.compose.material.TextField
13
+ import androidx.compose.runtime.Composable
14
+ import androidx.compose.runtime.getValue
15
+ import androidx.compose.runtime.mutableStateOf
16
+ import androidx.compose.runtime.remember
17
+ import androidx.compose.runtime.setValue
18
+ import androidx.compose.ui.Modifier
19
+ import androidx.compose.ui.unit.dp
20
+
21
+ @Composable
22
+ fun ExposedSelectionMenu (
23
+ title : String ,
24
+ index : Int ,
25
+ options : List <String >,
26
+ onSelected : (Int ) -> Unit ,
27
+ ) {
28
+
29
+ var expanded by remember { mutableStateOf(false ) }
30
+ var selectedOptionText by remember { mutableStateOf(options[index]) }
31
+
32
+ ExposedDropdownMenuBox (
33
+ modifier = Modifier
34
+ .fillMaxWidth()
35
+ .padding(vertical = 4 .dp),
36
+ expanded = expanded,
37
+ onExpandedChange = {
38
+ expanded = it
39
+ }
40
+ ) {
41
+
42
+ TextField (
43
+ modifier = Modifier .fillMaxWidth(),
44
+ readOnly = true ,
45
+ value = selectedOptionText,
46
+ onValueChange = { },
47
+ label = { Text (title) },
48
+ trailingIcon = { ExposedDropdownMenuDefaults .TrailingIcon (expanded = expanded) },
49
+ colors = ExposedDropdownMenuDefaults .textFieldColors()
50
+ )
51
+ ExposedDropdownMenu (
52
+ modifier = Modifier .fillMaxWidth(),
53
+ expanded = expanded,
54
+ onDismissRequest = {
55
+ expanded = false
56
+
57
+ }
58
+ ) {
59
+ options.forEachIndexed { index: Int , selectionOption: String ->
60
+ DropdownMenuItem (
61
+ modifier = Modifier .fillMaxWidth(),
62
+ content = {
63
+ Text (text = selectionOption)
64
+ },
65
+ onClick = {
66
+ selectedOptionText = selectionOption
67
+ expanded = false
68
+ onSelected(index)
69
+ }
70
+ )
71
+ }
72
+ }
73
+ }
74
+ }
0 commit comments