1
1
package dev.lbeernaert.youhavemail.screens
2
2
3
- import androidx.compose.foundation.background
4
3
import androidx.compose.foundation.clickable
5
4
import androidx.compose.foundation.layout.Box
6
5
import androidx.compose.foundation.layout.Column
7
6
import androidx.compose.foundation.layout.Spacer
8
7
import androidx.compose.foundation.layout.fillMaxSize
9
8
import androidx.compose.foundation.layout.fillMaxWidth
10
9
import androidx.compose.foundation.layout.padding
10
+ import androidx.compose.foundation.layout.width
11
11
import androidx.compose.foundation.layout.wrapContentSize
12
- import androidx.compose.foundation.layout.wrapContentWidth
13
12
import androidx.compose.material.Divider
14
13
import androidx.compose.material.DropdownMenu
15
14
import androidx.compose.material.DropdownMenuItem
@@ -18,7 +17,6 @@ import androidx.compose.material.ExposedDropdownMenuDefaults
18
17
import androidx.compose.material.MaterialTheme
19
18
import androidx.compose.material.Text
20
19
import androidx.compose.material.TextField
21
- import androidx.compose.material.TextFieldDefaults
22
20
import androidx.compose.runtime.Composable
23
21
import androidx.compose.runtime.collectAsState
24
22
import androidx.compose.runtime.getValue
@@ -28,12 +26,13 @@ import androidx.compose.runtime.remember
28
26
import androidx.compose.runtime.setValue
29
27
import androidx.compose.ui.Alignment
30
28
import androidx.compose.ui.Modifier
31
- import androidx.compose.ui.graphics.Color
32
- import androidx.compose.ui.res.colorResource
29
+ import androidx.compose.ui.geometry.Size
30
+ import androidx.compose.ui.layout.onGloballyPositioned
31
+ import androidx.compose.ui.platform.LocalDensity
33
32
import androidx.compose.ui.res.stringResource
34
- import androidx.compose.ui.text.TextStyle
35
33
import androidx.compose.ui.text.style.TextAlign
36
34
import androidx.compose.ui.unit.dp
35
+ import androidx.compose.ui.unit.toSize
37
36
import dev.lbeernaert.youhavemail.R
38
37
import dev.lbeernaert.youhavemail.app.State
39
38
import dev.lbeernaert.youhavemail.components.ActionButton
@@ -65,6 +64,8 @@ fun Settings(
65
64
listOf (30UL , 60UL , 120UL , 180UL , 300UL , 600UL , 900UL , 1200UL , 1800UL , 3600UL )
66
65
var expanded by remember { mutableStateOf(false ) }
67
66
var selectedIndex by remember { mutableIntStateOf(0 ) }
67
+ // textFieldSize is used to assign to DropDownMenu the same width as TextField
68
+ var textFieldSize by remember { mutableStateOf(Size .Zero )}
68
69
69
70
val onPollIntervalModified: () -> Unit = {
70
71
runTask(updatingPollIntervalLabel) {
@@ -87,9 +88,11 @@ fun Settings(
87
88
TextField (
88
89
modifier = Modifier
89
90
.fillMaxWidth()
90
- .clickable { expanded = ! expanded },
91
+ .clickable { expanded = ! expanded }
92
+ .onGloballyPositioned { coordinates ->
93
+ textFieldSize = coordinates.size.toSize()
94
+ },
91
95
value = secondsToText(pollIntervalValue),
92
- textStyle = TextStyle (color = Color .Black ),
93
96
readOnly = true ,
94
97
enabled = false ,
95
98
singleLine = true ,
@@ -99,7 +102,7 @@ fun Settings(
99
102
expanded = expanded,
100
103
onIconClick = { expanded = ! expanded })
101
104
},
102
- colors = TextFieldDefaults .textFieldColors(backgroundColor = colorResource(id = R .color.gray_dropdownmenu) ),
105
+ colors = ExposedDropdownMenuDefaults .textFieldColors(),
103
106
)
104
107
105
108
Spacer (modifier = Modifier .padding(5 .dp))
@@ -117,27 +120,22 @@ fun Settings(
117
120
118
121
Box (
119
122
modifier = Modifier
120
- .padding(20 .dp)
121
123
.fillMaxSize()
122
124
.wrapContentSize(Alignment .TopStart )
123
125
) {
124
126
DropdownMenu (
125
127
expanded = expanded,
126
128
onDismissRequest = { expanded = false },
127
129
modifier = Modifier
128
- .background(colorResource(id = R .color.gray_dropdownmenu))
129
- .wrapContentWidth()
130
+ .width(with (LocalDensity .current) { textFieldSize.width.toDp() })
130
131
) {
131
132
timeIntervals.forEachIndexed { index, seconds ->
132
133
DropdownMenuItem (onClick = {
133
134
expanded = false
134
135
selectedIndex = index
135
136
onPollIntervalModified()
136
137
}) {
137
- Text (
138
- text = secondsToText(seconds),
139
- color = Color .Black
140
- )
138
+ Text (text = secondsToText(seconds))
141
139
}
142
140
}
143
141
}
0 commit comments